summaryrefslogtreecommitdiff
path: root/world/map/npc
diff options
context:
space:
mode:
authormekolat <mekolat@users.noreply.github.com>2016-04-19 09:42:48 -0400
committermekolat <mekolat@users.noreply.github.com>2016-04-19 09:42:48 -0400
commitea7d999c39ead96efb6d9af7e68794c59290cf60 (patch)
tree771e06363fe2e7609847a0a63a2e499632d3d7a2 /world/map/npc
parent9e7f46ac732851c1359a15837c82ebf67ea2be39 (diff)
parent91fe3711fcacdfe83794b4347595e56e90e9d3a7 (diff)
downloadserverdata-ea7d999c39ead96efb6d9af7e68794c59290cf60.tar.gz
serverdata-ea7d999c39ead96efb6d9af7e68794c59290cf60.tar.bz2
serverdata-ea7d999c39ead96efb6d9af7e68794c59290cf60.tar.xz
serverdata-ea7d999c39ead96efb6d9af7e68794c59290cf60.zip
Merge self-fork from mekolat/magic-v3
Magic v3 spells
Diffstat (limited to 'world/map/npc')
-rw-r--r--world/map/npc/001-1/_import.txt1
-rw-r--r--world/map/npc/001-1/_mobs.txt31
-rw-r--r--world/map/npc/001-1/_nodes.txt4
-rw-r--r--world/map/npc/001-1/ched.txt20
-rw-r--r--world/map/npc/001-1/children.txt2
-rw-r--r--world/map/npc/001-1/guards.txt2
-rw-r--r--world/map/npc/001-2/_import.txt1
-rw-r--r--world/map/npc/001-2/_mobs.txt6
-rw-r--r--world/map/npc/001-2/_nodes.txt16
-rw-r--r--world/map/npc/001-2/government_building.txt8
-rw-r--r--world/map/npc/001-2/pauline.txt10
-rw-r--r--world/map/npc/001-2/tondar.txt2
-rw-r--r--world/map/npc/001-2/wizards.txt100
-rw-r--r--world/map/npc/001-3/_import.txt1
-rw-r--r--world/map/npc/001-3/_mobs.txt13
-rw-r--r--world/map/npc/001-3/_nodes.txt4
-rw-r--r--world/map/npc/002-1/_import.txt1
-rw-r--r--world/map/npc/002-1/_mobs.txt57
-rw-r--r--world/map/npc/002-1/_nodes.txt4
-rw-r--r--world/map/npc/002-1/elanore.txt16
-rw-r--r--world/map/npc/002-2/_import.txt1
-rw-r--r--world/map/npc/002-2/_mobs.txt6
-rw-r--r--world/map/npc/002-2/_nodes.txt4
-rw-r--r--world/map/npc/002-2/stranger.txt235
-rw-r--r--world/map/npc/002-3/_import.txt1
-rw-r--r--world/map/npc/002-3/_mobs.txt6
-rw-r--r--world/map/npc/002-3/_nodes.txt4
-rw-r--r--world/map/npc/002-4/_import.txt1
-rw-r--r--world/map/npc/002-4/_mobs.txt49
-rw-r--r--world/map/npc/002-4/_nodes.txt4
-rw-r--r--world/map/npc/002-5/_import.txt1
-rw-r--r--world/map/npc/002-5/_mobs.txt65
-rw-r--r--world/map/npc/002-5/_nodes.txt4
-rw-r--r--world/map/npc/004-3/_import.txt1
-rw-r--r--world/map/npc/004-3/_mobs.txt35
-rw-r--r--world/map/npc/004-3/_nodes.txt4
-rw-r--r--world/map/npc/004-4/_import.txt1
-rw-r--r--world/map/npc/004-4/_mobs.txt39
-rw-r--r--world/map/npc/004-4/_nodes.txt4
-rw-r--r--world/map/npc/004-5/_import.txt1
-rw-r--r--world/map/npc/004-5/_mobs.txt45
-rw-r--r--world/map/npc/004-5/_nodes.txt4
-rw-r--r--world/map/npc/005-3/_import.txt1
-rw-r--r--world/map/npc/005-3/_mobs.txt27
-rw-r--r--world/map/npc/005-3/_nodes.txt4
-rw-r--r--world/map/npc/006-1/_import.txt1
-rw-r--r--world/map/npc/006-1/_mobs.txt73
-rw-r--r--world/map/npc/006-1/_nodes.txt4
-rw-r--r--world/map/npc/006-1/spirit.txt4
-rw-r--r--world/map/npc/006-1/tree.txt6
-rw-r--r--world/map/npc/006-2/_import.txt1
-rw-r--r--world/map/npc/006-2/_mobs.txt6
-rw-r--r--world/map/npc/006-2/_nodes.txt4
-rw-r--r--world/map/npc/006-3/_import.txt1
-rw-r--r--world/map/npc/006-3/_mobs.txt78
-rw-r--r--world/map/npc/006-3/_nodes.txt4
-rw-r--r--world/map/npc/007-1/_import.txt1
-rw-r--r--world/map/npc/007-1/_mobs.txt69
-rw-r--r--world/map/npc/007-1/_nodes.txt4
-rw-r--r--world/map/npc/007-2/_import.txt1
-rw-r--r--world/map/npc/007-2/_mobs.txt6
-rw-r--r--world/map/npc/007-2/_nodes.txt4
-rw-r--r--world/map/npc/007-2/witch.txt46
-rw-r--r--world/map/npc/008-1/_import.txt1
-rw-r--r--world/map/npc/008-1/_mobs.txt69
-rw-r--r--world/map/npc/008-1/_nodes.txt4
-rw-r--r--world/map/npc/008-1/annualeaster.txt323
-rw-r--r--world/map/npc/008-1/hinnak.txt2
-rw-r--r--world/map/npc/009-1/_import.txt1
-rw-r--r--world/map/npc/009-1/_mobs.txt36
-rw-r--r--world/map/npc/009-1/_nodes.txt4
-rw-r--r--world/map/npc/009-2/_import.txt1
-rw-r--r--world/map/npc/009-2/_mobs.txt6
-rw-r--r--world/map/npc/009-2/_nodes.txt4
-rw-r--r--world/map/npc/009-2/misc.txt2
-rw-r--r--world/map/npc/009-2/wyara.txt6
-rw-r--r--world/map/npc/009-3/_import.txt1
-rw-r--r--world/map/npc/009-3/_mobs.txt34
-rw-r--r--world/map/npc/009-3/_nodes.txt4
-rw-r--r--world/map/npc/009-3/sword.txt4
-rw-r--r--world/map/npc/009-4/_import.txt1
-rw-r--r--world/map/npc/009-4/_mobs.txt35
-rw-r--r--world/map/npc/009-4/_nodes.txt4
-rw-r--r--world/map/npc/009-5/_import.txt1
-rw-r--r--world/map/npc/009-5/_mobs.txt6
-rw-r--r--world/map/npc/009-5/_nodes.txt4
-rw-r--r--world/map/npc/009-6/_import.txt1
-rw-r--r--world/map/npc/009-6/_mobs.txt6
-rw-r--r--world/map/npc/009-6/_nodes.txt4
-rw-r--r--world/map/npc/009-6/brodomir.txt2
-rw-r--r--world/map/npc/009-7/_import.txt1
-rw-r--r--world/map/npc/009-7/_mobs.txt6
-rw-r--r--world/map/npc/009-7/_nodes.txt4
-rw-r--r--world/map/npc/009-7/eventHandler.txt2
-rw-r--r--world/map/npc/009-7/rouge.txt4
-rw-r--r--world/map/npc/010-1/_import.txt1
-rw-r--r--world/map/npc/010-1/_mobs.txt92
-rw-r--r--world/map/npc/010-1/_nodes.txt4
-rw-r--r--world/map/npc/010-2/_import.txt1
-rw-r--r--world/map/npc/010-2/_mobs.txt6
-rw-r--r--world/map/npc/010-2/_nodes.txt4
-rw-r--r--world/map/npc/011-1/_import.txt1
-rw-r--r--world/map/npc/011-1/_mobs.txt99
-rw-r--r--world/map/npc/011-1/_nodes.txt4
-rw-r--r--world/map/npc/011-1/auldsbel.txt20
-rw-r--r--world/map/npc/011-3/_import.txt1
-rw-r--r--world/map/npc/011-3/_mobs.txt20
-rw-r--r--world/map/npc/011-3/_nodes.txt4
-rw-r--r--world/map/npc/011-4/_import.txt1
-rw-r--r--world/map/npc/011-4/_mobs.txt40
-rw-r--r--world/map/npc/011-4/_nodes.txt4
-rw-r--r--world/map/npc/011-6/_import.txt1
-rw-r--r--world/map/npc/011-6/_mobs.txt140
-rw-r--r--world/map/npc/011-6/_nodes.txt4
-rw-r--r--world/map/npc/012-1/_import.txt1
-rw-r--r--world/map/npc/012-1/_mobs.txt83
-rw-r--r--world/map/npc/012-1/_nodes.txt4
-rw-r--r--world/map/npc/012-3/_import.txt1
-rw-r--r--world/map/npc/012-3/_mobs.txt53
-rw-r--r--world/map/npc/012-3/_nodes.txt4
-rw-r--r--world/map/npc/012-3/mana-seed.txt2
-rw-r--r--world/map/npc/012-4/_import.txt1
-rw-r--r--world/map/npc/012-4/_mobs.txt174
-rw-r--r--world/map/npc/012-4/_nodes.txt4
-rw-r--r--world/map/npc/013-1/_import.txt1
-rw-r--r--world/map/npc/013-1/_mobs.txt91
-rw-r--r--world/map/npc/013-1/_nodes.txt4
-rw-r--r--world/map/npc/013-1/sagatha.txt14
-rw-r--r--world/map/npc/013-2/_import.txt1
-rw-r--r--world/map/npc/013-2/_mobs.txt6
-rw-r--r--world/map/npc/013-2/_nodes.txt4
-rw-r--r--world/map/npc/013-2/wizard.txt2
-rw-r--r--world/map/npc/013-3/_import.txt1
-rw-r--r--world/map/npc/013-3/_mobs.txt107
-rw-r--r--world/map/npc/013-3/_nodes.txt4
-rw-r--r--world/map/npc/014-1/_import.txt1
-rw-r--r--world/map/npc/014-1/_mobs.txt98
-rw-r--r--world/map/npc/014-1/_nodes.txt4
-rw-r--r--world/map/npc/014-1/wedding-officiator.txt12
-rw-r--r--world/map/npc/014-3/_import.txt1
-rw-r--r--world/map/npc/014-3/_mobs.txt13
-rw-r--r--world/map/npc/014-3/_nodes.txt4
-rw-r--r--world/map/npc/015-1/_import.txt1
-rw-r--r--world/map/npc/015-1/_mobs.txt76
-rw-r--r--world/map/npc/015-1/_nodes.txt4
-rw-r--r--world/map/npc/015-1/sword.txt6
-rw-r--r--world/map/npc/015-3/_import.txt1
-rw-r--r--world/map/npc/015-3/_mobs.txt29
-rw-r--r--world/map/npc/015-3/_nodes.txt4
-rw-r--r--world/map/npc/016-1/_import.txt1
-rw-r--r--world/map/npc/016-1/_mobs.txt66
-rw-r--r--world/map/npc/016-1/_nodes.txt4
-rw-r--r--world/map/npc/017-1/_import.txt1
-rw-r--r--world/map/npc/017-1/_mobs.txt117
-rw-r--r--world/map/npc/017-1/_nodes.txt4
-rw-r--r--world/map/npc/017-2/_import.txt1
-rw-r--r--world/map/npc/017-2/_mobs.txt6
-rw-r--r--world/map/npc/017-2/_nodes.txt4
-rw-r--r--world/map/npc/017-3/_import.txt1
-rw-r--r--world/map/npc/017-3/_mobs.txt6
-rw-r--r--world/map/npc/017-3/_nodes.txt4
-rw-r--r--world/map/npc/017-4/_import.txt1
-rw-r--r--world/map/npc/017-4/_mobs.txt6
-rw-r--r--world/map/npc/017-4/_nodes.txt4
-rw-r--r--world/map/npc/017-4/waric.txt12
-rw-r--r--world/map/npc/017-9/_import.txt1
-rw-r--r--world/map/npc/017-9/_mobs.txt6
-rw-r--r--world/map/npc/017-9/_nodes.txt4
-rw-r--r--world/map/npc/017-9/npcs.txt17
-rw-r--r--world/map/npc/018-1/_import.txt1
-rw-r--r--world/map/npc/018-1/_mobs.txt125
-rw-r--r--world/map/npc/018-1/_nodes.txt4
-rw-r--r--world/map/npc/018-2/_import.txt1
-rw-r--r--world/map/npc/018-2/_mobs.txt13
-rw-r--r--world/map/npc/018-2/_nodes.txt4
-rw-r--r--world/map/npc/018-3/_import.txt1
-rw-r--r--world/map/npc/018-3/_mobs.txt107
-rw-r--r--world/map/npc/018-3/_nodes.txt4
-rw-r--r--world/map/npc/019-1/_import.txt1
-rw-r--r--world/map/npc/019-1/_mobs.txt34
-rw-r--r--world/map/npc/019-1/_nodes.txt4
-rw-r--r--world/map/npc/019-3/_import.txt1
-rw-r--r--world/map/npc/019-3/_mobs.txt20
-rw-r--r--world/map/npc/019-3/_nodes.txt4
-rw-r--r--world/map/npc/019-4/_import.txt1
-rw-r--r--world/map/npc/019-4/_mobs.txt34
-rw-r--r--world/map/npc/019-4/_nodes.txt4
-rw-r--r--world/map/npc/020-1/_import.txt1
-rw-r--r--world/map/npc/020-1/_mobs.txt13
-rw-r--r--world/map/npc/020-1/_nodes.txt4
-rw-r--r--world/map/npc/020-2/_import.txt1
-rw-r--r--world/map/npc/020-2/_mobs.txt6
-rw-r--r--world/map/npc/020-2/_nodes.txt4
-rw-r--r--world/map/npc/020-3/_import.txt1
-rw-r--r--world/map/npc/020-3/_mobs.txt24
-rw-r--r--world/map/npc/020-3/_nodes.txt4
-rw-r--r--world/map/npc/021-3/_import.txt1
-rw-r--r--world/map/npc/021-3/_mobs.txt51
-rw-r--r--world/map/npc/021-3/_nodes.txt4
-rw-r--r--world/map/npc/025-1/_import.txt1
-rw-r--r--world/map/npc/025-1/_mobs.txt71
-rw-r--r--world/map/npc/025-1/_nodes.txt4
-rw-r--r--world/map/npc/025-3/_import.txt1
-rw-r--r--world/map/npc/025-3/_mobs.txt34
-rw-r--r--world/map/npc/025-3/_nodes.txt4
-rw-r--r--world/map/npc/025-4/_import.txt1
-rw-r--r--world/map/npc/025-4/_mobs.txt15
-rw-r--r--world/map/npc/025-4/_nodes.txt4
-rw-r--r--world/map/npc/026-1/_import.txt1
-rw-r--r--world/map/npc/026-1/_mobs.txt63
-rw-r--r--world/map/npc/026-1/_nodes.txt4
-rw-r--r--world/map/npc/027-1/_import.txt1
-rw-r--r--world/map/npc/027-1/_mobs.txt75
-rw-r--r--world/map/npc/027-1/_nodes.txt4
-rw-r--r--world/map/npc/027-2/_import.txt1
-rw-r--r--world/map/npc/027-2/_mobs.txt46
-rw-r--r--world/map/npc/027-2/_nodes.txt16
-rw-r--r--world/map/npc/027-3/_import.txt1
-rw-r--r--world/map/npc/027-3/_mobs.txt47
-rw-r--r--world/map/npc/027-3/_nodes.txt4
-rw-r--r--world/map/npc/027-4/_import.txt1
-rw-r--r--world/map/npc/027-4/_mobs.txt26
-rw-r--r--world/map/npc/027-4/_nodes.txt4
-rw-r--r--world/map/npc/027-5/_import.txt1
-rw-r--r--world/map/npc/027-5/_mobs.txt45
-rw-r--r--world/map/npc/027-5/_nodes.txt4
-rw-r--r--world/map/npc/027-6/_import.txt1
-rw-r--r--world/map/npc/027-6/_mobs.txt6
-rw-r--r--world/map/npc/027-6/_nodes.txt4
-rw-r--r--world/map/npc/027-6/general_krukan.txt4
-rw-r--r--world/map/npc/027-7/_import.txt1
-rw-r--r--world/map/npc/027-7/_mobs.txt6
-rw-r--r--world/map/npc/027-7/_nodes.txt4
-rw-r--r--world/map/npc/027-7/general_razha.txt4
-rw-r--r--world/map/npc/027-8/_import.txt1
-rw-r--r--world/map/npc/027-8/_mobs.txt6
-rw-r--r--world/map/npc/027-8/_nodes.txt4
-rw-r--r--world/map/npc/027-8/general_terogan.txt4
-rw-r--r--world/map/npc/028-1/_import.txt1
-rw-r--r--world/map/npc/028-1/_mobs.txt6
-rw-r--r--world/map/npc/028-1/_nodes.txt4
-rw-r--r--world/map/npc/028-3/_import.txt1
-rw-r--r--world/map/npc/028-3/_mobs.txt6
-rw-r--r--world/map/npc/028-3/_nodes.txt4
-rw-r--r--world/map/npc/029-1/_import.txt1
-rw-r--r--world/map/npc/029-1/_mobs.txt43
-rw-r--r--world/map/npc/029-1/_nodes.txt4
-rw-r--r--world/map/npc/029-1/barrier.txt2
-rw-r--r--world/map/npc/029-2/_import.txt2
-rw-r--r--world/map/npc/029-2/_mobs.txt13
-rw-r--r--world/map/npc/029-2/_nodes.txt16
-rw-r--r--world/map/npc/029-2/alchemy.txt99
-rw-r--r--world/map/npc/029-2/morgan.txt8
-rw-r--r--world/map/npc/029-2/tanisha.txt2
-rw-r--r--world/map/npc/029-3/_import.txt1
-rw-r--r--world/map/npc/029-3/_mobs.txt6
-rw-r--r--world/map/npc/029-3/_nodes.txt4
-rw-r--r--world/map/npc/029-3/parua.txt6
-rw-r--r--world/map/npc/030-2/_import.txt1
-rw-r--r--world/map/npc/030-2/_mobs.txt6
-rw-r--r--world/map/npc/030-2/_nodes.txt4
-rw-r--r--world/map/npc/030-3/_import.txt1
-rw-r--r--world/map/npc/030-3/_mobs.txt6
-rw-r--r--world/map/npc/030-3/_nodes.txt4
-rw-r--r--world/map/npc/030-4/_import.txt1
-rw-r--r--world/map/npc/030-4/_mobs.txt6
-rw-r--r--world/map/npc/030-4/_nodes.txt4
-rw-r--r--world/map/npc/030-4/mana_battery.txt6
-rw-r--r--world/map/npc/031-1/_import.txt1
-rw-r--r--world/map/npc/031-1/_mobs.txt34
-rw-r--r--world/map/npc/031-1/_nodes.txt4
-rw-r--r--world/map/npc/031-2/_import.txt1
-rw-r--r--world/map/npc/031-2/_mobs.txt6
-rw-r--r--world/map/npc/031-2/_nodes.txt4
-rw-r--r--world/map/npc/031-3/_import.txt1
-rw-r--r--world/map/npc/031-3/_mobs.txt224
-rw-r--r--world/map/npc/031-3/_nodes.txt4
-rw-r--r--world/map/npc/031-4/_import.txt1
-rw-r--r--world/map/npc/031-4/_mobs.txt6
-rw-r--r--world/map/npc/031-4/_nodes.txt4
-rw-r--r--world/map/npc/031-4/cindyCave.txt4
-rw-r--r--world/map/npc/032-3/_import.txt1
-rw-r--r--world/map/npc/032-3/_mobs.txt71
-rw-r--r--world/map/npc/032-3/_nodes.txt4
-rw-r--r--world/map/npc/033-1/_import.txt1
-rw-r--r--world/map/npc/033-1/_mobs.txt34
-rw-r--r--world/map/npc/033-1/_nodes.txt4
-rw-r--r--world/map/npc/033-1/kimarr.txt2
-rw-r--r--world/map/npc/034-1/_import.txt1
-rw-r--r--world/map/npc/034-1/_mobs.txt48
-rw-r--r--world/map/npc/034-1/_nodes.txt4
-rw-r--r--world/map/npc/034-2/_import.txt1
-rw-r--r--world/map/npc/034-2/_mobs.txt6
-rw-r--r--world/map/npc/034-2/_nodes.txt4
-rw-r--r--world/map/npc/035-2/_import.txt1
-rw-r--r--world/map/npc/035-2/_mobs.txt6
-rw-r--r--world/map/npc/035-2/_nodes.txt4
-rw-r--r--world/map/npc/036-2/_import.txt1
-rw-r--r--world/map/npc/036-2/_mobs.txt6
-rw-r--r--world/map/npc/036-2/_nodes.txt4
-rw-r--r--world/map/npc/043-3/_import.txt1
-rw-r--r--world/map/npc/043-3/_mobs.txt49
-rw-r--r--world/map/npc/043-3/_nodes.txt4
-rw-r--r--world/map/npc/043-4/_import.txt1
-rw-r--r--world/map/npc/043-4/_mobs.txt80
-rw-r--r--world/map/npc/043-4/_nodes.txt4
-rw-r--r--world/map/npc/045-1/_import.txt1
-rw-r--r--world/map/npc/045-1/_mobs.txt66
-rw-r--r--world/map/npc/045-1/_nodes.txt4
-rw-r--r--world/map/npc/046-1/_import.txt1
-rw-r--r--world/map/npc/046-1/_mobs.txt63
-rw-r--r--world/map/npc/046-1/_nodes.txt4
-rw-r--r--world/map/npc/046-3/_import.txt1
-rw-r--r--world/map/npc/046-3/_mobs.txt66
-rw-r--r--world/map/npc/046-3/_nodes.txt4
-rw-r--r--world/map/npc/047-1/_import.txt1
-rw-r--r--world/map/npc/047-1/_mobs.txt95
-rw-r--r--world/map/npc/047-1/_nodes.txt4
-rw-r--r--world/map/npc/047-3/_import.txt1
-rw-r--r--world/map/npc/047-3/_mobs.txt78
-rw-r--r--world/map/npc/047-3/_nodes.txt4
-rw-r--r--world/map/npc/048-2/_import.txt1
-rw-r--r--world/map/npc/048-2/_mobs.txt6
-rw-r--r--world/map/npc/048-2/_nodes.txt4
-rw-r--r--world/map/npc/051-1/_import.txt1
-rw-r--r--world/map/npc/051-1/_mobs.txt20
-rw-r--r--world/map/npc/051-1/_nodes.txt4
-rw-r--r--world/map/npc/051-3/_import.txt1
-rw-r--r--world/map/npc/051-3/_mobs.txt78
-rw-r--r--world/map/npc/051-3/_nodes.txt4
-rw-r--r--world/map/npc/051-3/ambush.txt4
-rw-r--r--world/map/npc/051-3/reinforcements.txt4
-rw-r--r--world/map/npc/052-1/_import.txt1
-rw-r--r--world/map/npc/052-1/_mobs.txt13
-rw-r--r--world/map/npc/052-1/_nodes.txt4
-rw-r--r--world/map/npc/052-1/channelling.txt10
-rw-r--r--world/map/npc/052-2/_import.txt1
-rw-r--r--world/map/npc/052-2/_mobs.txt6
-rw-r--r--world/map/npc/052-2/_nodes.txt4
-rw-r--r--world/map/npc/052-2/lobby.txt2
-rw-r--r--world/map/npc/052-2/partyroom.txt8
-rw-r--r--world/map/npc/052-2/storage.txt10
-rw-r--r--world/map/npc/055-1/_import.txt1
-rw-r--r--world/map/npc/055-1/_mobs.txt100
-rw-r--r--world/map/npc/055-1/_nodes.txt16
-rw-r--r--world/map/npc/055-1/pumpkins.txt124
-rw-r--r--world/map/npc/055-3/_import.txt1
-rw-r--r--world/map/npc/055-3/_mobs.txt52
-rw-r--r--world/map/npc/055-3/_nodes.txt4
-rw-r--r--world/map/npc/056-2/_import.txt1
-rw-r--r--world/map/npc/056-2/_mobs.txt6
-rw-r--r--world/map/npc/056-2/_nodes.txt4
-rw-r--r--world/map/npc/057-1/_import.txt1
-rw-r--r--world/map/npc/057-1/_mobs.txt97
-rw-r--r--world/map/npc/057-1/_nodes.txt16
-rw-r--r--world/map/npc/annuals/fathertime.txt8
-rw-r--r--world/map/npc/annuals/halloween/debug.txt1
-rw-r--r--world/map/npc/annuals/xmas/debug.txt1
-rw-r--r--world/map/npc/botcheck/_import.txt1
-rw-r--r--world/map/npc/botcheck/_mobs.txt6
-rw-r--r--world/map/npc/botcheck/_nodes.txt4
-rw-r--r--world/map/npc/commands/_import.txt10
-rw-r--r--world/map/npc/commands/_procedures.txt53
-rw-r--r--world/map/npc/commands/changesex.txt32
-rw-r--r--world/map/npc/commands/class.txt31
-rw-r--r--[-rwxr-xr-x]world/map/npc/commands/debug.txt (renamed from world/map/npc/functions/debug.txt)46
-rw-r--r--world/map/npc/commands/destroynpc.txt35
-rw-r--r--world/map/npc/commands/marry.txt69
-rw-r--r--world/map/npc/commands/numa.txt132
-rw-r--r--world/map/npc/commands/pullrabbit.txt (renamed from world/map/npc/items/magic_gm_top_hat.txt)16
-rw-r--r--world/map/npc/commands/remotecmd.txt62
-rw-r--r--world/map/npc/commands/zeny.txt79
-rw-r--r--world/map/npc/functions/clear_vars.txt3
-rw-r--r--world/map/npc/functions/default_npc_checks.txt1
-rw-r--r--world/map/npc/functions/game_rules.txt19
-rw-r--r--world/map/npc/functions/global_event_handler.txt9
-rw-r--r--world/map/npc/functions/hug.txt24
-rw-r--r--world/map/npc/functions/quiz.txt5
-rw-r--r--world/map/npc/functions/strangerquiz.txt8
-rw-r--r--world/map/npc/functions/superdebug.txt65
-rw-r--r--world/map/npc/items/check_wand.txt65
-rw-r--r--world/map/npc/magic/README.md54
-rw-r--r--world/map/npc/magic/_import.txt42
-rw-r--r--world/map/npc/magic/_procedures.txt162
-rw-r--r--world/map/npc/magic/level0-wand.txt76
-rw-r--r--world/map/npc/magic/level1-aggravate.txt23
-rw-r--r--world/map/npc/magic/level1-detect-magic.txt30
-rw-r--r--world/map/npc/magic/level1-experience.txt41
-rw-r--r--world/map/npc/magic/level1-flare-dart.txt45
-rw-r--r--world/map/npc/magic/level1-grow-alizarin.txt38
-rw-r--r--world/map/npc/magic/level1-grow-cobalt.txt38
-rw-r--r--world/map/npc/magic/level1-grow-gamboge.txt38
-rw-r--r--world/map/npc/magic/level1-grow-mauve.txt38
-rw-r--r--world/map/npc/magic/level1-lesser-heal.txt51
-rw-r--r--world/map/npc/magic/level1-magic-blade.txt48
-rw-r--r--world/map/npc/magic/level1-make-sulphur.txt25
-rw-r--r--world/map/npc/magic/level1-sense-spouse.txt25
-rw-r--r--world/map/npc/magic/level1-summon-maggots.txt53
-rw-r--r--world/map/npc/magic/level1-transmute-wood.txt37
-rw-r--r--world/map/npc/magic/level2-arrow-hail.txt115
-rw-r--r--world/map/npc/magic/level2-barrier.txt50
-rw-r--r--world/map/npc/magic/level2-detect-players.txt33
-rw-r--r--world/map/npc/magic/level2-enchant-lifestone.txt36
-rw-r--r--world/map/npc/magic/level2-flying-backpack.txt41
-rw-r--r--world/map/npc/magic/level2-happy-curse.txt43
-rw-r--r--world/map/npc/magic/level2-hide.txt45
-rw-r--r--world/map/npc/magic/level2-lay-on-hands.txt61
-rw-r--r--world/map/npc/magic/level2-lightning-strike.txt80
-rw-r--r--world/map/npc/magic/level2-magic-knuckles.txt45
-rw-r--r--world/map/npc/magic/level2-make-arrows.txt27
-rw-r--r--world/map/npc/magic/level2-make-iron-powder.txt27
-rw-r--r--world/map/npc/magic/level2-make-shirt.txt25
-rw-r--r--world/map/npc/magic/level2-make-short-tanktop.txt25
-rw-r--r--world/map/npc/magic/level2-make-tanktop.txt25
-rw-r--r--world/map/npc/magic/level2-protect.txt50
-rw-r--r--world/map/npc/magic/level2-rain.txt104
-rw-r--r--world/map/npc/magic/level2-shear.txt60
-rw-r--r--world/map/npc/magic/level2-summon-fluffies.txt54
-rw-r--r--world/map/npc/magic/level2-summon-mouboo.txt54
-rw-r--r--world/map/npc/magic/level2-summon-pinkie.txt54
-rw-r--r--world/map/npc/magic/level2-summon-snakes.txt55
-rw-r--r--world/map/npc/magic/level2-summon-spiky-mushroom.txt54
-rw-r--r--world/map/npc/magic/level2-summon-wickedmushroom.txt55
-rw-r--r--world/map/npc/magic/level2-toxic-dart.txt51
-rw-r--r--world/map/npc/magic/level3-necromancy.txt55
-rw-r--r--world/map/npc/scripts.conf11
426 files changed, 4854 insertions, 4308 deletions
diff --git a/world/map/npc/001-1/_import.txt b/world/map/npc/001-1/_import.txt
index 9b7ca66f..3122724c 100644
--- a/world/map/npc/001-1/_import.txt
+++ b/world/map/npc/001-1/_import.txt
@@ -2,6 +2,7 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 001-1
npc: npc/001-1/_mobs.txt
+npc: npc/001-1/_nodes.txt
npc: npc/001-1/_warps.txt
npc: npc/001-1/adrian.txt
npc: npc/001-1/ched.txt
diff --git a/world/map/npc/001-1/_mobs.txt b/world/map/npc/001-1/_mobs.txt
index 6fc46da5..ebc1b007 100644
--- a/world/map/npc/001-1/_mobs.txt
+++ b/world/map/npc/001-1/_mobs.txt
@@ -1,29 +1,8 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Tulimshar Port mobs
-001-1,32,59,10,11|monster|GreenSlime|1005,8,100000ms,30000ms,Mob001-1::On1005
-001-1,45,100,10,11|monster|GreenSlime|1005,8,100000ms,30000ms,Mob001-1::On1005
-001-1,37,75,8,34|monster|SeaSlime|1033,8,100000ms,30000ms,Mob001-1::On1033
-001-1,86,84,65,55|monster|Maggot|1002,11,100000ms,30000ms,Mob001-1::On1002
-001-1,86,84,65,55|monster|SeaSlime|1033,8,100000ms,30000ms,Mob001-1::On1033
-
-
-001-1,0,0,0|script|Mob001-1|32767
-{
- end;
-
-On1002:
- set @mobID, 1002;
- callfunc "MobPoints";
- end;
-
-On1005:
- set @mobID, 1005;
- callfunc "MobPoints";
- end;
-
-On1033:
- set @mobID, 1033;
- callfunc "MobPoints";
- end;
-}
+001-1,32,59,10,11|monster|GreenSlime|1005,8,100000ms,30000ms
+001-1,45,100,10,11|monster|GreenSlime|1005,8,100000ms,30000ms
+001-1,37,75,8,34|monster|SeaSlime|1033,8,100000ms,30000ms
+001-1,86,84,65,55|monster|Maggot|1002,11,100000ms,30000ms
+001-1,86,84,65,55|monster|SeaSlime|1033,8,100000ms,30000ms
diff --git a/world/map/npc/001-1/_nodes.txt b/world/map/npc/001-1/_nodes.txt
new file mode 100644
index 00000000..8d82cc96
--- /dev/null
+++ b/world/map/npc/001-1/_nodes.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Tulimshar Port nodes
+
+// (no nodes)
diff --git a/world/map/npc/001-1/ched.txt b/world/map/npc/001-1/ched.txt
index ddfddd95..1710ff1e 100644
--- a/world/map/npc/001-1/ched.txt
+++ b/world/map/npc/001-1/ched.txt
@@ -3,23 +3,9 @@
001-1,43,48,0|script|Ched|113
{
mes "[Ched]";
- mes "\"I'm trying to get a spell to work, but I'm having some trouble.\"";
- mes "\"It's supposed to combine two potions, but I can't seem to figure out which two to combine...\"";
+ mes "\"I'm trying to get work on my Alchemy homework, but I'm having some trouble.\"";
+ mes "\"I'm supposed to combine two potions to create a " + getitemlink("ConcentrationPotion") + ", but I can't seem to figure out which two to combine...\"";
next;
- menu
- "Good luck with that.", L_Done,
- "What spell is it?", L_Next;
-
-L_Next:
- mes "";
- mes "[Ched]";
- mes "\"Well, I don't remember what it's called... I took it out of 'Timbleweed's Advanced Transmutations,' but it seems awfully hard to cast.\"";
- next;
- mes "\"If you want to try it, the invocation is '" + getspellinvocation("merge-concentration-potions") + ".' I just can't get the hang of it though.\"";
- next;
- mes "\"Maybe I should go back to practicing '" + getspellinvocation("detect-magic") + "' until I can cast it properly.\" %%6";
- goto L_Done;
-
-L_Done:
+ mes "\"Maybe I should go back to practicing '" + get(.invocation$, "detect-magic") + "' until I can make potions properly.\" %%6";
close;
}
diff --git a/world/map/npc/001-1/children.txt b/world/map/npc/001-1/children.txt
index 5ad738a9..83718566 100644
--- a/world/map/npc/001-1/children.txt
+++ b/world/map/npc/001-1/children.txt
@@ -78,7 +78,7 @@ L_keepword:
L_giveword:
mes "[Aisha]";
mes "Aisha looks around as she leans in and hushes you to silence. After a few seconds, she whispers to you:";
- mes "\"I like you, so I'll tell you the bad word. But you can't tell anyone else about it! The bad word is '" + getspellinvocation("aggravate") + ".'\"";
+ mes "\"I like you, so I'll tell you the bad word. But you can't tell anyone else about it! The bad word is '" + get(.invocation$, "spell-aggravate") + ".'\"";
next;
mes "[Aisha]";
diff --git a/world/map/npc/001-1/guards.txt b/world/map/npc/001-1/guards.txt
index 0167510e..df25a13e 100644
--- a/world/map/npc/001-1/guards.txt
+++ b/world/map/npc/001-1/guards.txt
@@ -91,6 +91,6 @@ L_message:
mes "[Ryan the Town Guard]";
mes "\" Watch out for Black Scorpions. They are extremely dangerous!\"";
next;
- mes "\"Whenever one approaches the town gate, Ekinu has me run around shouting '" + getspellinvocation("aggravate") + ".' Somehow, this distracts it so Ekinu can kill it.\"";
+ mes "\"Whenever one approaches the town gate, Ekinu has me run around shouting '" + $@SPELL_AGGRAVATE$ + ".' Somehow, this distracts it so Ekinu can kill it.\"";
close;
}
diff --git a/world/map/npc/001-2/_import.txt b/world/map/npc/001-2/_import.txt
index 338ec411..ee75d70e 100644
--- a/world/map/npc/001-2/_import.txt
+++ b/world/map/npc/001-2/_import.txt
@@ -2,6 +2,7 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 001-2
npc: npc/001-2/_mobs.txt
+npc: npc/001-2/_nodes.txt
npc: npc/001-2/_warps.txt
npc: npc/001-2/bank.txt
npc: npc/001-2/david.txt
diff --git a/world/map/npc/001-2/_mobs.txt b/world/map/npc/001-2/_mobs.txt
index 167e1f2e..570c1234 100644
--- a/world/map/npc/001-2/_mobs.txt
+++ b/world/map/npc/001-2/_mobs.txt
@@ -1,9 +1,3 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// South Tulimshar Indoor mobs
-
-
-001-2,0,0,0|script|Mob001-2|32767
-{
- end;
-}
diff --git a/world/map/npc/001-2/_nodes.txt b/world/map/npc/001-2/_nodes.txt
new file mode 100644
index 00000000..5a5cdeac
--- /dev/null
+++ b/world/map/npc/001-2/_nodes.txt
@@ -0,0 +1,16 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// South Tulimshar Indoor nodes
+
+001-2,0,0,0|script|Node001-2|32767
+{
+ end;
+OnInit:
+ setarray .m$, "_N-Alchemy", "001-2", "001-2", "001-2", "001-2";
+ setarray .x1, "_N-Alchemy", 98, 92, 98, 92;
+ setarray .y1, "_N-Alchemy", 76, 76, 89, 89;
+ setarray .x2, "_N-Alchemy", 0, 0, 0, 0;
+ setarray .y2, "_N-Alchemy", 0, 0, 0, 0;
+ setarray .id, "_N-Alchemy", 0, 0, 0, 0;
+ donpcevent "_N-Alchemy::OnMaybeStart";
+ destroy;
+}
diff --git a/world/map/npc/001-2/government_building.txt b/world/map/npc/001-2/government_building.txt
index 51b43a8c..03c3eaf7 100644
--- a/world/map/npc/001-2/government_building.txt
+++ b/world/map/npc/001-2/government_building.txt
@@ -6,7 +6,7 @@
mes "[Estard]";
mes "\"Hello. What can I do for you?\"";
next;
- if (getpartnerid2())
+ if (PARTNER)
goto L_main_married;
menu
@@ -35,7 +35,7 @@ L_marry_do:
callsub S_give_rings;
mes "";
mes "[Estard]";
- mes "\"Here are your rings. In order to marry each other, you both must stand within one of the designated areas (like that small rug over there in the corner), wear your rings, and say 'marry (your partner's name).'\"";
+ mes "\"Here are your rings. In order to marry each other, you both must stand within one of the designated areas (like that small rug over there in the corner), wear your rings, and say '#marry (your partner's name).'\"";
close;
L_marry_too_young:
@@ -93,8 +93,8 @@ L_do_divorce:
if (Zeny < @divorce_cost)
goto L_not_enough_money;
- if (divorce())
- goto L_divorce_done;
+ set PARTNER, 0, PARTNER; // divorce the partner first, which will also divorce the rid if succesful
+ if (PARTNER < 1) goto L_divorce_done;
mes "";
mes "[Estard]";
diff --git a/world/map/npc/001-2/pauline.txt b/world/map/npc/001-2/pauline.txt
index 4fbd5a5f..6925d554 100644
--- a/world/map/npc/001-2/pauline.txt
+++ b/world/map/npc/001-2/pauline.txt
@@ -92,7 +92,7 @@ L_Spells:
L_Next1:
mes "[Pauline]";
mes "\"Well I could only read the invocations. So I don't exactly know what kind of ingredients you are going to need.\"";
- mes "\"The first one for the mouboo was " + getspellinvocation("summon-mouboo") + " and the one for the pinkie was " + getspellinvocation("summon-pinkie") +".\"";
+ mes "\"The first one for the mouboo was " + get(.invocation$, "smmouboo") + " and the one for the pinkie was " + get(.invocation$, "smpinkie") +".\"";
next;
mes "\"For the pinkie spell my suggestion is to try similar ingredients to the other Astral spells. Try a root and some item typical for pinkies.\"";
mes "\"The mouboo spell might be more complicated. From what I could translate, one of the spell components is crafted by magic.\"";
@@ -157,7 +157,7 @@ L_Next4:
goto L_DidNotWorkMouboo;
L_DidNotWorkMouboo:
- mes "The Witch takes " + @pauline_ingredient1$ + " and " + @pauline_ingredient2$ + " and puts them together calling " + getspellinvocation("summon-mouboo") + ".";
+ mes "The Witch takes " + @pauline_ingredient1$ + " and " + @pauline_ingredient2$ + " and puts them together calling " + get(.invocation$, "summon-mouboo") + ".";
mes "Nothing happens.";
mes "[Pauline]";
mes "\"It seems you did not tell me the correct ingredients. Come back when you find the correct ones.\"";
@@ -174,7 +174,7 @@ L_Pass2Mouboo:
goto L_DidNotWorkMouboo;
L_TrySpellMouboo:
- mes "The Witch takes " + @pauline_ingredient1$ + " and " + @pauline_ingredient2$ + " and puts them together calling " + getspellinvocation("summon-mouboo") + ".";
+ mes "The Witch takes " + @pauline_ingredient1$ + " and " + @pauline_ingredient2$ + " and puts them together calling " + get(.invocation$, "summon-mouboo") + ".";
monster "001-1", 55,68, "Good", 1028, 1;
mes "[Pauline]";
mes "\"It worked!\"";
@@ -220,7 +220,7 @@ L_Next5:
goto L_DidNotWorkPinkie;
L_DidNotWorkPinkie:
- mes "The Witch takes " + @pauline_ingredient1$ + " and " + @pauline_ingredient2$ + " and puts them together calling " + getspellinvocation("summon-pinkie") + ".";
+ mes "The Witch takes " + @pauline_ingredient1$ + " and " + @pauline_ingredient2$ + " and puts them together calling " + get(.invocation$, "summon-pinkie") + ".";
mes "Nothing happens.";
mes "[Pauline]";
mes "\"It seems you did not tell me the correct ingredients. Come back when you find the correct ones.\"";
@@ -237,7 +237,7 @@ L_Pass2Pinkie:
goto L_DidNotWorkPinkie;
L_TrySpellPinkie:
- mes "The Witch takes " + @pauline_ingredient1$ + " and " + @pauline_ingredient2$ + " and puts them together calling " + getspellinvocation("summon-pinkie") + ".";
+ mes "The Witch takes " + @pauline_ingredient1$ + " and " + @pauline_ingredient2$ + " and puts them together calling " + get(.invocation$, "summon-pinkie") + ".";
monster "001-1", 54,68, "Good", 1018, 1;
mes "[Pauline]";
mes "\"It worked!\"";
diff --git a/world/map/npc/001-2/tondar.txt b/world/map/npc/001-2/tondar.txt
index ba4c0fff..d7fd3531 100644
--- a/world/map/npc/001-2/tondar.txt
+++ b/world/map/npc/001-2/tondar.txt
@@ -41,7 +41,7 @@ L_askspell:
L_spell:
mes "[Tondar]";
- mes "\"Well, all right; this one can't do much harm. Press your hands together and say `" + getspellinvocation("ask-magic-exp") + "'.\"";
+ mes "\"Well, all right; this one can't do much harm. Press your hands together and say `" + get(.invocation$, "spell-experience") + "'.\"";
mes "\"This will release a steady flow of magic within you. Focus and try to control it; it is a good meditative practice.\"";
close;
diff --git a/world/map/npc/001-2/wizards.txt b/world/map/npc/001-2/wizards.txt
index 37efa8bd..3c7d6ecf 100644
--- a/world/map/npc/001-2/wizards.txt
+++ b/world/map/npc/001-2/wizards.txt
@@ -1,90 +1,26 @@
// Council of Ruling Wizards Room
-// manaseed
-001-2,104,19,0|script|Desert Mana Seed#_M|166
+-|script|Magic Council|32767
{
- mes "Strangely, you feel nothing – as if its membrane is closed to you.";
+ explode .@n, strnpcinfo(0), "#";
+ if (.@n[1] == 9) mes "The arch wizard seems to be busy.";
+ elif (.@n[1]) mes "The wizard seems to ignore you.";
+ else mes "Strangely, you feel nothing – as if its membrane is closed to you.";
next;
mes "Perhaps you should come back later.";
close;
-}
-
-//
-001-2,99,22,0|script|Wizard#1|355
-{
- mes "The wizard seems to ignore you.";
- next;
- mes "Perhaps you should come back later.";
- close;
-}
-
-//
-001-2,92,24,0|script|Wizard#2|356
-{
- mes "The wizard seems to ignore you.";
- next;
- mes "Perhaps you should come back later.";
- close;
-}
-
-//
-001-2,92,30,0|script|Wizard#3|357
-{
- mes "The wizard seems to ignore you.";
- next;
- mes "Perhaps you should come back later.";
- close;
-}
-
-//
-001-2,99,32,0|script|Wizard#4|358
-{
- mes "The wizard seems to ignore you.";
- next;
- mes "Perhaps you should come back later.";
- close;
-}
-
-//
-001-2,110,22,0|script|Wizard#5|359
-{
- mes "The wizard seems to ignore you.";
- next;
- mes "Perhaps you should come back later.";
- close;
-}
-
-//
-001-2,117,24,0|script|Wizard#6|360
-{
- mes "The wizard seems to ignore you.";
- next;
- mes "Perhaps you should come back later.";
- close;
-}
-
-//
-001-2,117,30,0|script|Wizard#7|361
-{
- mes "The wizard seems to ignore you.";
- next;
- mes "Perhaps you should come back later.";
- close;
-}
-//
-001-2,110,32,0|script|Wizard#8|362
-{
- mes "The wizard seems to ignore you.";
- next;
- mes "Perhaps you should come back later.";
- close;
-}
-//
-001-2,104,27,0|script|Arch-Wizard#9|354
-{
- mes "The arch wizard seems to be busy.";
- next;
- mes "Perhaps you should come back later.";
- close;
+OnInit:
+ void
+ puppet("001-2", 104, 19, "Desert Mana Seed#_M", 166),
+ puppet("001-2", 99, 22, "Wizard#1", 355),
+ puppet("001-2", 92, 24, "Wizard#2", 356),
+ puppet("001-2", 92, 30, "Wizard#3", 357),
+ puppet("001-2", 99, 32, "Wizard#4", 358),
+ puppet("001-2", 110, 22, "Wizard#5", 359),
+ puppet("001-2", 117, 24, "Wizard#6", 360),
+ puppet("001-2", 117, 30, "Wizard#7", 361),
+ puppet("001-2", 110, 32, "Wizard#8", 362),
+ puppet("001-2", 104, 27, "Arch-Wizard#9", 354);
+ end;
}
diff --git a/world/map/npc/001-3/_import.txt b/world/map/npc/001-3/_import.txt
index 92e0e964..5c821ae4 100644
--- a/world/map/npc/001-3/_import.txt
+++ b/world/map/npc/001-3/_import.txt
@@ -2,6 +2,7 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 001-3
npc: npc/001-3/_mobs.txt
+npc: npc/001-3/_nodes.txt
npc: npc/001-3/_warps.txt
npc: npc/001-3/guards.txt
npc: npc/001-3/mapflags.txt
diff --git a/world/map/npc/001-3/_mobs.txt b/world/map/npc/001-3/_mobs.txt
index 1c76eac9..63e16e8c 100644
--- a/world/map/npc/001-3/_mobs.txt
+++ b/world/map/npc/001-3/_mobs.txt
@@ -1,15 +1,4 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Tulimshar Arena mobs
-001-3,0,0,0,0|monster|Maggot|1002,10,0ms,0ms,Mob001-3::On1002
-
-
-001-3,0,0,0|script|Mob001-3|32767
-{
- end;
-
-On1002:
- set @mobID, 1002;
- callfunc "MobPoints";
- end;
-}
+001-3,0,0,0,0|monster|Maggot|1002,10,0ms,0ms
diff --git a/world/map/npc/001-3/_nodes.txt b/world/map/npc/001-3/_nodes.txt
new file mode 100644
index 00000000..8a03ab93
--- /dev/null
+++ b/world/map/npc/001-3/_nodes.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Tulimshar Arena nodes
+
+// (no nodes)
diff --git a/world/map/npc/002-1/_import.txt b/world/map/npc/002-1/_import.txt
index 66366b6c..1e4e50cf 100644
--- a/world/map/npc/002-1/_import.txt
+++ b/world/map/npc/002-1/_import.txt
@@ -2,6 +2,7 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 002-1
npc: npc/002-1/_mobs.txt
+npc: npc/002-1/_nodes.txt
npc: npc/002-1/_warps.txt
npc: npc/002-1/anwar.txt
npc: npc/002-1/bard.txt
diff --git a/world/map/npc/002-1/_mobs.txt b/world/map/npc/002-1/_mobs.txt
index 19933fab..63282a48 100644
--- a/world/map/npc/002-1/_mobs.txt
+++ b/world/map/npc/002-1/_mobs.txt
@@ -1,47 +1,16 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Tulimshar South mobs
-002-1,93,62,24,9|monster|Maggot|1002,11,100000ms,30000ms,Mob002-1::On1002
-002-1,112,62,11,9|monster|Maggot|1002,11,100000ms,30000ms,Mob002-1::On1002
-002-1,108,73,11,9|monster|Maggot|1002,11,100000ms,30000ms,Mob002-1::On1002
-002-1,62,28,3,15|monster|Maggot|1002,6,100000ms,30000ms,Mob002-1::On1002
-002-1,74,96,24,33|monster|Scorpion|1003,12,100000ms,30000ms,Mob002-1::On1003
-002-1,113,114,10,7|monster|Maggot|1002,11,100000ms,30000ms,Mob002-1::On1002
-002-1,43,61,10,70|monster|Scorpion|1003,6,100000ms,30000ms,Mob002-1::On1003
-002-1,70,92,49,19|monster|Scorpion|1003,10,100000ms,30000ms,Mob002-1::On1003
-002-1,40,93,19,20|monster|RedScorpion|1004,10,100000ms,30000ms,Mob002-1::On1004
-002-1,42,40,8,29|monster|SeaSlime|1033,8,100000ms,30000ms,Mob002-1::On1033
-002-1,33,75,9,40|monster|SeaSlime|1033,8,100000ms,30000ms,Mob002-1::On1033
-002-1,99,62,37,9|monster|Scorpion|1003,6,100000ms,30000ms,Mob002-1::On1003
-002-1,73,105,20,21|monster|FireGoblin|1011,6,100000ms,30000ms,Mob002-1::On1011
-
-
-002-1,0,0,0|script|Mob002-1|32767
-{
- end;
-
-On1002:
- set @mobID, 1002;
- callfunc "MobPoints";
- end;
-
-On1003:
- set @mobID, 1003;
- callfunc "MobPoints";
- end;
-
-On1004:
- set @mobID, 1004;
- callfunc "MobPoints";
- end;
-
-On1011:
- set @mobID, 1011;
- callfunc "MobPoints";
- end;
-
-On1033:
- set @mobID, 1033;
- callfunc "MobPoints";
- end;
-}
+002-1,93,62,24,9|monster|Maggot|1002,11,100000ms,30000ms
+002-1,112,62,11,9|monster|Maggot|1002,11,100000ms,30000ms
+002-1,108,73,11,9|monster|Maggot|1002,11,100000ms,30000ms
+002-1,62,28,3,15|monster|Maggot|1002,6,100000ms,30000ms
+002-1,74,96,24,33|monster|Scorpion|1003,12,100000ms,30000ms
+002-1,113,114,10,7|monster|Maggot|1002,11,100000ms,30000ms
+002-1,43,61,10,70|monster|Scorpion|1003,6,100000ms,30000ms
+002-1,70,92,49,19|monster|Scorpion|1003,10,100000ms,30000ms
+002-1,40,93,19,20|monster|RedScorpion|1004,10,100000ms,30000ms
+002-1,42,40,8,29|monster|SeaSlime|1033,8,100000ms,30000ms
+002-1,33,75,9,40|monster|SeaSlime|1033,8,100000ms,30000ms
+002-1,99,62,37,9|monster|Scorpion|1003,6,100000ms,30000ms
+002-1,73,105,20,21|monster|FireGoblin|1011,6,100000ms,30000ms
diff --git a/world/map/npc/002-1/_nodes.txt b/world/map/npc/002-1/_nodes.txt
new file mode 100644
index 00000000..7e192e45
--- /dev/null
+++ b/world/map/npc/002-1/_nodes.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Tulimshar South nodes
+
+// (no nodes)
diff --git a/world/map/npc/002-1/elanore.txt b/world/map/npc/002-1/elanore.txt
index ea3b78bf..b235c5b4 100644
--- a/world/map/npc/002-1/elanore.txt
+++ b/world/map/npc/002-1/elanore.txt
@@ -19,8 +19,6 @@ function|script|ElanoreFix
function|script|elanore_decrease_exp
{
- if (attachrid(@killerrid) == 0)
- goto L_Return;
set @Q_heal_exp, MAGIC_EXPERIENCE >> 24;
if (@Q_heal_exp < 8) goto L_OnPcKillWipe;
set @Q_heal_exp, @Q_heal_exp - 8;
@@ -233,7 +231,7 @@ L_MakeSelf:
goto L_MakeSelf_yes;
L_MakeSelf_yes:
- mes "\"Oh, but of course! You are powerful enough to make your own lifestones, using the enchantment '" + getspellinvocation("enchant-lifestone") + "'. This will consume a bug leg or a maggot slime or one of each of the four healing herbs, though.\"";
+ mes "\"Oh, but of course! You are powerful enough to make your own lifestones, using the enchantment '" + get(.invocation$, "enchant-lifestone") + "'. This will consume a bug leg or a maggot slime or one of each of the four healing herbs, though.\"";
goto L_Close;
L_MakeSelf_no:
@@ -265,15 +263,15 @@ L_T_Initial:
next;
mes "[Elanore the Healer]";
mes "\"To heal someone, first locate the injury. As a beginner, you have to touch the wound; with practice, it will be enough to think about it. Hold the lifestone in one hand, touching the wound with the other.\"";
- mes "\"Then say, '" + getspellinvocation("lesser-heal") + "', followed by the name of the one you wish to heal.\"";
+ mes "\"Then say, '" + get(.invocation$, "lesser-heal") + "', followed by the name of the one you wish to heal.\"";
next;
mes "[Elanore the Healer]";
mes "\"You might want to write that down, actually. In fact, you might want to make sure to keep notes of all spells you hear, for you never know if you will hear them again!\"";
- mes "\"The invocation was '" + getspellinvocation("lesser-heal") + "'.\"";
+ mes "\"The invocation was '" + get(.invocation$, "lesser-heal") + "'.\"";
next;
mes "[Elanore the Healer]";
mes "\"This will only cure cuts and bruises, though, and it will take some time to take effect. It will be useless to mend broken bones or more severe injuries!\"";
- mes "\"To heal yourself, it's enough to just say '" + getspellinvocation("lesser-heal") + "' by itself.\"";
+ mes "\"To heal yourself, it's enough to just say '" + get(.invocation$, "lesser-heal") + "' by itself.\"";
next;
mes "[Elanore the Healer]";
mes "\"Let me give you a lifestone to get started with.\"";
@@ -344,7 +342,7 @@ L_T_ChkAdvToLOH:
mes "\"I will now teach you how to heal by laying on your hands. The technique is similar to the spell I taught you at the beginning, but this time you transfer your own health instead of drawing health from a lifestone.\"";
next;
mes "[Elanore the Healer]";
- mes "\"First, lay your hand on the person you wish to heal. You needn't touch the injury itself, though you have to touch the skin until you are a little more experienced. Then, medidate on the word '" + getspellinvocation("lay-on-hands") + "'\"";
+ mes "\"First, lay your hand on the person you wish to heal. You needn't touch the injury itself, though you have to touch the skin until you are a little more experienced. Then, medidate on the word '" + get(.invocation$, "lay-on-hands") + "'\"";
next;
mes "[Elanore the Healer]";
mes "\"This will let your own life force flow into the person you are healing. If you are badly injured yourself, you will not be able to do this.\"";
@@ -500,11 +498,11 @@ L_T_CurePosion:
next;
mes "[Elanore the Healer]";
mes "\"If you would like to cure someone who is poisoned, first rub a Gamboge leaf between your hands. Your hands must be covered in Gamboge liquid for this to work.\"";
- mes "\"Speak the invocation, `" + getspellinvocation("cure-poison") + "'.\"";
+ mes "\"Speak the invocation, `" + get(.invocation$, "cure-poison") + "'.\"";
mes "\"Next, you either touch the poisoned person with your hands, or speak their name. You have to be close for this to work, though.\"";
next;
mes "[Elanore the Healer]";
- mes "\"Once again, the invocation is `" + getspellinvocation("cure-poison") + "'.\"";
+ mes "\"Once again, the invocation is `" + get(.invocation$, "cure-poison") + "'.\"";
mes "\"Come back again soon; there is another spell I would like to teach you.\"";
next;
set @Q_status, @STATUS_LEARNED_CURE_POISON;
diff --git a/world/map/npc/002-2/_import.txt b/world/map/npc/002-2/_import.txt
index c2bd041a..3f90a1d8 100644
--- a/world/map/npc/002-2/_import.txt
+++ b/world/map/npc/002-2/_import.txt
@@ -2,6 +2,7 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 002-2
npc: npc/002-2/_mobs.txt
+npc: npc/002-2/_nodes.txt
npc: npc/002-2/_warps.txt
npc: npc/002-2/bakery.txt
npc: npc/002-2/barber.txt
diff --git a/world/map/npc/002-2/_mobs.txt b/world/map/npc/002-2/_mobs.txt
index aad2a871..0d9b84e4 100644
--- a/world/map/npc/002-2/_mobs.txt
+++ b/world/map/npc/002-2/_mobs.txt
@@ -1,9 +1,3 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Sandstorm Desert Indoors mobs
-
-
-002-2,0,0,0|script|Mob002-2|32767
-{
- end;
-}
diff --git a/world/map/npc/002-2/_nodes.txt b/world/map/npc/002-2/_nodes.txt
new file mode 100644
index 00000000..875c3c60
--- /dev/null
+++ b/world/map/npc/002-2/_nodes.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Sandstorm Desert Indoors nodes
+
+// (no nodes)
diff --git a/world/map/npc/002-2/stranger.txt b/world/map/npc/002-2/stranger.txt
index 8186636b..e323293e 100644
--- a/world/map/npc/002-2/stranger.txt
+++ b/world/map/npc/002-2/stranger.txt
@@ -58,171 +58,104 @@ L_Towel:
mes "\"The first one is easy.\"";
next;
- setarray @easy_questions$,
- "What two words are written in big friendly letters on the back cover?",
- "What's the name of the paranoid robot?",
- "What is the answer to life, the universe and everything?",
- "What is the first name of the author of the hitchhikers guide?",
- "What is the last name of the author of the hitchhikers guide?",
- "Who is the male human protagonist?",
- "Who is the female human protagonist?",
- "According to the Guide, space is ____?",
- "What is the name of the spaceship which was stolen by the president of the universe?",
- "How many heads does Zaphod Beeblebrox have?";
-
- setarray @easy_answers_amount,2,2,2,2,2,4,4,2,4,2;
-
- set @random, rand(10);
- mes "\"" + @easy_questions$[@random] + "\"";
- input @answer$;
-
- if (@easy_answers_amount[@random] < 4)
- goto L_Easy_Skip4;
- set @quizparam$, "towelanswer0" + @random + "d";
- callfunc "StrangerQuiz";
- if (("###" + @answer$ == @quizanswer$))
- goto L_Right_Answer_Easy;
- goto L_Easy_Skip4;
-
-L_Easy_Skip4:
- if (@easy_answers_amount[@random] < 3)
- goto L_Easy_Skip3;
- set @quizparam$, "towelanswer0" + @random + "c";
- callfunc "StrangerQuiz";
- if (("###" + @answer$ == @quizanswer$))
- goto L_Right_Answer_Easy;
- goto L_Easy_Skip3;
-
-L_Easy_Skip3:
- set @quizparam$, "towelanswer0" + @random + "b";
- callfunc "StrangerQuiz";
- if (("###" + @answer$ == @quizanswer$))
- goto L_Right_Answer_Easy;
-
- set @quizparam$, "towelanswer0" + @random + "a";
- callfunc "StrangerQuiz";
- if (("###" + @answer$ == @quizanswer$))
- goto L_Right_Answer_Easy;
-
- goto L_Wrong_Answer;
-
-L_Right_Answer_Easy:
+ setarray @quiz_questions$[0],
+ "What two words are written in big friendly letters on the back cover?",
+ "What's the name of the paranoid robot?",
+ "What is the answer to life, the universe and everything?",
+ "What is the first name of the author of the hitchhikers guide?",
+ "What is the last name of the author of the hitchhikers guide?",
+ "Who is the male human protagonist?",
+ "Who is the female human protagonist?",
+ "According to the Guide, space is ___?",
+ "What is the name of the spaceship which was stolen by the president of the universe?",
+ "How many heads does Zaphod Beeblebrox have?";
+ setarray @quiz_answers$[0],
+ "Don't Panic",
+ "Marvin",
+ "42",
+ "Douglas",
+ "Adams",
+ "Arthur Philip Dent",
+ "Trillian",
+ "Big",
+ "Heart of Gold",
+ "2";
+
+ callfunc "MultiQuiz";
+ if (@success == 0) goto L_Wrong_Answer;
+
mes "[Stranger]";
mes "\"You're absolutely right. The next one will be more tricky.\"";
next;
- setarray @medium_questions$,
- "What is the name of the rock group claiming to be the loudest band in the universe?",
- "What star is near Ford's home planet?",
- "Which country does the human protagonist come from?",
- "What is the name of the computer on The Heart of Gold?",
- "What color is a Babel Fish?",
- "What did the bowl of petunias think?",
- "What body orifice should a babel fish be inserted in to work properly?",
- "What is the name of the super computer?",
- "What were the second most intelligent creatures on Earth?",
- "What race creates the worst poetry in universe?",
- "What is the name of the Vogon home planet?",
- "What is the name of the Restaurant at the End of the Universe?";
-
- setarray @medium_answers_amount,2,2,2,2,2,3,2,2,4,4,2,2;
-
- set @random, rand(12);
- mes "\"" + @medium_questions$[@random] + "\"";
- input @answer$;
-
- if (@medium_answers_amount[@random] < 4)
- goto L_Medium_Skip4;
-
- set @quizparam$, "towelanswer1" + @random + "d";
- callfunc "StrangerQuiz";
- if (("###" + @answer$ == @quizanswer$))
- goto L_Right_Answer_Medium;
- goto L_Medium_Skip4;
-
-L_Medium_Skip4:
- if (@medium_answers_amount[@random] < 3)
- goto L_Medium_Skip3;
- set @quizparam$, "towelanswer1" + @random + "c";
- callfunc "StrangerQuiz";
- if (("###" + @answer$ == @quizanswer$))
- goto L_Right_Answer_Medium;
- goto L_Medium_Skip3;
-
-L_Medium_Skip3:
- set @quizparam$, "towelanswer1" + @random + "b";
- callfunc "StrangerQuiz";
- if (("###" + @answer$ == @quizanswer$))
- goto L_Right_Answer_Medium;
-
- set @quizparam$, "towelanswer1" + @random + "a";
- callfunc "StrangerQuiz";
- if (("###" + @answer$ == @quizanswer$))
- goto L_Right_Answer_Medium;
-
- goto L_Wrong_Answer;
-
-L_Right_Answer_Medium:
+ setarray @quiz_questions$[0],
+ "What is the name of the rock group claiming to be the loudest band in the universe?",
+ "What star is near Ford's home planet?",
+ "Which country does the human protagonist come from?",
+ "What is the name of the computer on The Heart of Gold?",
+ "What color is a Babel Fish?",
+ "What did the bowl of petunias think?",
+ "What body orifice should a babel fish be inserted in to work properly?",
+ "What is the name of the super computer?",
+ "What were the second most intelligent creatures on Earth?",
+ "What race creates the worst poetry in universe?",
+ "What is the name of the Vogon home planet?",
+ "What is the name of the Restaurant at the End of the Universe?";
+ setarray @quiz_answers$[0],
+ "Disaster Area",
+ "Betelgeuse",
+ "England",
+ "Eddie",
+ "Yellow",
+ "Oh no, not again",
+ "Ear",
+ "Deep Thought",
+ "Dolphins",
+ "Vogons",
+ "Vogsphere",
+ "Milliways";
+
+ callfunc "MultiQuiz";
+ if (@success == 0) goto L_Wrong_Answer;
+
mes "[Stranger]";
mes "\"Not bad, not bad. Let's see if you can answer an even more difficult one.\"";
next;
- setarray @hard_questions$,
- "Drinking what drink is like having your brain smashed out by a slice of lemon wrapped round a large gold brick?",
- "How many pints of beers should you drink before hitchhiking?",
- "What initials are carved into Zaphod Beeblebrox's brain?",
- "What is Ford Prefect's nickname?",
- "Who is responsible for the fjords of Norway?",
- "What game is played on earth as a relict of memories to an ancient war?",
- "What is the name of the triple-breasted whore from Eroticon VI?",
- "Who will insult every living being in the universe, because he is immortal and getting bored?",
- "What is the name of the piteous creature that is continually reincarnated and subsequently killed, each time unknowingly, by Arthur Dent?";
-
- setarray @hard_answers_amount,4,2,2,2,2,2,2,4,2;
-
- set @random, rand(9);
- mes "\"" + @hard_questions$[@random] + "\"";
- input @answer$;
-
- if (@hard_answers_amount[@random] < 4)
- goto L_Hard_Skip4;
- set @quizparam$, "towelanswer2" + @random + "d";
- callfunc "StrangerQuiz";
- if (("###" + @answer$ == @quizanswer$))
- goto L_Right_Answer_Hard;
- goto L_Hard_Skip4;
-
-L_Hard_Skip4:
- if (@hard_answers_amount[@random] < 3)
- goto L_Hard_Skip3;
- set @quizparam$, "towelanswer2" + @random + "c";
- callfunc "StrangerQuiz";
- if (("###" + @answer$ == @quizanswer$))
- goto L_Right_Answer_Hard;
- goto L_Hard_Skip3;
-
-L_Hard_Skip3:
- set @quizparam$, "towelanswer2" + @random + "b";
- callfunc "StrangerQuiz";
- if (("###" + @answer$ == @quizanswer$))
- goto L_Right_Answer_Hard;
-
- set @quizparam$, "towelanswer2" + @random + "a";
- callfunc "StrangerQuiz";
- if (("###" + @answer$ == @quizanswer$))
- goto L_Right_Answer_Hard;
-
- goto L_Wrong_Answer;
-
-L_Right_Answer_Hard:
+ setarray @quiz_questions$[0],
+ "Drinking what drink is like having your brain smashed out by a slice of lemon wrapped round a large gold brick?",
+ "How many pints of beers should you drink before hitchhiking?",
+ "What initials are carved into Zaphod Beeblebrox's brain?",
+ "What is Ford Prefect's nickname?",
+ "Who is responsible for the fjords of Norway?",
+ "What game is played on earth as a relict of memories to an ancient war?",
+ "What is the name of the triple-breasted whore from Eroticon VI?",
+ "Who will insult every living being in the universe, because he is immortal and getting bored?",
+ "What is the name of the piteous creature that is continually reincarnated and subsequently killed, each time unknowingly, by Arthur Dent?";
+ setarray @quiz_answers$[0],
+ "Pan Galactic Gargle Blaster",
+ "3",
+ "ZB",
+ "Ix",
+ "Slartibartfast",
+ "Cricket",
+ "Eccentrica Gallumbits",
+ "Wowbagger",
+ "Agrajag";
+
+ callfunc "MultiQuiz";
+ if (@success == 0) goto L_Wrong_Answer;
+
mes "[Stranger]";
mes "\"Unbelievable! You're really a wise person.\"";
next;
mes "\"One last question, but this shouldn't be a problem for you.\"";
next;
mes "\"What is the most important item for every hitchhiker to have?\"";
- input @answer$;
- if (@answer$ != "Towel" && @answer$ != "towel")
+ mes "";
+ mes "##BDrag & drop the item from your inventory##b.";
+ requestitem .@answer$[0];
+ if (.@answer$[0] != "Towel" && .@answer$[0] != "HitchhikersTowel")
goto L_Wrong_Answer;
mes "[Stranger]";
diff --git a/world/map/npc/002-3/_import.txt b/world/map/npc/002-3/_import.txt
index bb5e72d3..ec14b916 100644
--- a/world/map/npc/002-3/_import.txt
+++ b/world/map/npc/002-3/_import.txt
@@ -2,6 +2,7 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 002-3
npc: npc/002-3/_mobs.txt
+npc: npc/002-3/_nodes.txt
npc: npc/002-3/_warps.txt
npc: npc/002-3/mapflags.txt
npc: npc/002-3/merchant.txt
diff --git a/world/map/npc/002-3/_mobs.txt b/world/map/npc/002-3/_mobs.txt
index 963b8e36..a0552ba2 100644
--- a/world/map/npc/002-3/_mobs.txt
+++ b/world/map/npc/002-3/_mobs.txt
@@ -1,9 +1,3 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Tulimshar Mining Camp mobs
-
-
-002-3,0,0,0|script|Mob002-3|32767
-{
- end;
-}
diff --git a/world/map/npc/002-3/_nodes.txt b/world/map/npc/002-3/_nodes.txt
new file mode 100644
index 00000000..eb53d136
--- /dev/null
+++ b/world/map/npc/002-3/_nodes.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Tulimshar Mining Camp nodes
+
+// (no nodes)
diff --git a/world/map/npc/002-4/_import.txt b/world/map/npc/002-4/_import.txt
index 7f617989..44a09e1d 100644
--- a/world/map/npc/002-4/_import.txt
+++ b/world/map/npc/002-4/_import.txt
@@ -2,6 +2,7 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 002-4
npc: npc/002-4/_mobs.txt
+npc: npc/002-4/_nodes.txt
npc: npc/002-4/_warps.txt
npc: npc/002-4/mapflags.txt
npc: npc/002-4/mine_triggerone.txt
diff --git a/world/map/npc/002-4/_mobs.txt b/world/map/npc/002-4/_mobs.txt
index 0a461429..0643fb93 100644
--- a/world/map/npc/002-4/_mobs.txt
+++ b/world/map/npc/002-4/_mobs.txt
@@ -1,38 +1,17 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Desert Mines mobs
-002-4,39,37,15,11|monster|CaveMaggot|1056,5,100000ms,30000ms,Mob002-4::On1056
-002-4,91,41,17,20|monster|AngryFireGoblin|1108,3,100000ms,30000ms,Mob002-4::On1108
-002-4,71,35,25,17|monster|CaveMaggot|1056,4,100000ms,30000ms,Mob002-4::On1056
-002-4,69,100,8,5|monster|AngryFireGoblin|1108,2,100000ms,30000ms,Mob002-4::On1108
-002-4,68,57,26,24|monster|AngryScorpion|1057,5,100000ms,30000ms,Mob002-4::On1057
-002-4,49,58,4,15|monster|AngryScorpion|1057,5,100000ms,30000ms,Mob002-4::On1057
-002-4,38,76,15,22|monster|AngryScorpion|1057,4,100000ms,30000ms,Mob002-4::On1057
-002-4,58,78,6,17|monster|CaveMaggot|1056,4,100000ms,30000ms,Mob002-4::On1056
-002-4,89,68,11,32|monster|AngryScorpion|1057,4,100000ms,30000ms,Mob002-4::On1057
-002-4,84,93,19,17|monster|CaveMaggot|1056,4,100000ms,30000ms,Mob002-4::On1056
-002-4,72,77,21,14|monster|AngryFireGoblin|1108,3,100000ms,30000ms,Mob002-4::On1108
-002-4,67,91,11,12|monster|AngryScorpion|1057,4,100000ms,30000ms,Mob002-4::On1057
-002-4,58,95,6,13|monster|CaveMaggot|1056,4,100000ms,30000ms,Mob002-4::On1056
-002-4,63,100,2,5|monster|AngryScorpion|1057,3,100000ms,30000ms,Mob002-4::On1057
-
-
-002-4,0,0,0|script|Mob002-4|32767
-{
- end;
-
-On1056:
- set @mobID, 1056;
- callfunc "MobPoints";
- end;
-
-On1057:
- set @mobID, 1057;
- callfunc "MobPoints";
- end;
-
-On1108:
- set @mobID, 1108;
- callfunc "MobPoints";
- end;
-}
+002-4,39,37,15,11|monster|CaveMaggot|1056,5,100000ms,30000ms
+002-4,91,41,17,20|monster|AngryFireGoblin|1108,3,100000ms,30000ms
+002-4,71,35,25,17|monster|CaveMaggot|1056,4,100000ms,30000ms
+002-4,69,100,8,5|monster|AngryFireGoblin|1108,2,100000ms,30000ms
+002-4,68,57,26,24|monster|AngryScorpion|1057,5,100000ms,30000ms
+002-4,49,58,4,15|monster|AngryScorpion|1057,5,100000ms,30000ms
+002-4,38,76,15,22|monster|AngryScorpion|1057,4,100000ms,30000ms
+002-4,58,78,6,17|monster|CaveMaggot|1056,4,100000ms,30000ms
+002-4,89,68,11,32|monster|AngryScorpion|1057,4,100000ms,30000ms
+002-4,84,93,19,17|monster|CaveMaggot|1056,4,100000ms,30000ms
+002-4,72,77,21,14|monster|AngryFireGoblin|1108,3,100000ms,30000ms
+002-4,67,91,11,12|monster|AngryScorpion|1057,4,100000ms,30000ms
+002-4,58,95,6,13|monster|CaveMaggot|1056,4,100000ms,30000ms
+002-4,63,100,2,5|monster|AngryScorpion|1057,3,100000ms,30000ms
diff --git a/world/map/npc/002-4/_nodes.txt b/world/map/npc/002-4/_nodes.txt
new file mode 100644
index 00000000..ddcec23c
--- /dev/null
+++ b/world/map/npc/002-4/_nodes.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Desert Mines nodes
+
+// (no nodes)
diff --git a/world/map/npc/002-5/_import.txt b/world/map/npc/002-5/_import.txt
index 7b2a4daa..d50b74a4 100644
--- a/world/map/npc/002-5/_import.txt
+++ b/world/map/npc/002-5/_import.txt
@@ -2,6 +2,7 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 002-5
npc: npc/002-5/_mobs.txt
+npc: npc/002-5/_nodes.txt
npc: npc/002-5/_warps.txt
npc: npc/002-5/chest.txt
npc: npc/002-5/mapflags.txt
diff --git a/world/map/npc/002-5/_mobs.txt b/world/map/npc/002-5/_mobs.txt
index c6894850..700685c8 100644
--- a/world/map/npc/002-5/_mobs.txt
+++ b/world/map/npc/002-5/_mobs.txt
@@ -1,51 +1,20 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Deep Desert Mines mobs
-002-5,37,89,12,7|monster|AngryFireGoblin|1108,3,100000ms,30000ms,Mob002-5::On1108
-002-5,33,76,3,11|monster|CaveMaggot|1056,3,100000ms,30000ms,Mob002-5::On1056
-002-5,40,68,7,5|monster|AngryScorpion|1057,3,100000ms,30000ms,Mob002-5::On1057
-002-5,40,38,18,5|monster|Archant|1060,3,100000ms,30000ms,Mob002-5::On1060
-002-5,56,97,2,5|monster|Archant|1060,1,100000ms,30000ms,Mob002-5::On1060
-002-5,68,100,12,2|monster|YellowSlime|1007,4,100000ms,30000ms,Mob002-5::On1007
-002-5,91,80,1,5|monster|Archant|1060,1,100000ms,30000ms,Mob002-5::On1060
-002-5,89,94,1,5|monster|Archant|1060,1,100000ms,30000ms,Mob002-5::On1060
-002-5,74,78,1,5|monster|Archant|1060,2,100000ms,30000ms,Mob002-5::On1060
-002-5,94,72,2,4|monster|Archant|1060,1,100000ms,30000ms,Mob002-5::On1060
-002-5,90,61,6,2|monster|YellowSlime|1007,1,100000ms,30000ms,Mob002-5::On1007
-002-5,74,35,1,5|monster|Archant|1060,1,100000ms,30000ms,Mob002-5::On1060
-002-5,84,33,1,5|monster|Archant|1060,1,100000ms,30000ms,Mob002-5::On1060
-002-5,84,46,1,5|monster|Archant|1060,1,100000ms,30000ms,Mob002-5::On1060
-002-5,99,38,1,5|monster|Archant|1060,1,100000ms,30000ms,Mob002-5::On1060
-002-5,93,38,8,2|monster|YellowSlime|1007,2,100000ms,30000ms,Mob002-5::On1007
-002-5,62,62,5,43|monster|AngryFireGoblin|1108,3,100000ms,30000ms,Mob002-5::On1108
-
-
-002-5,0,0,0|script|Mob002-5|32767
-{
- end;
-
-On1007:
- set @mobID, 1007;
- callfunc "MobPoints";
- end;
-
-On1056:
- set @mobID, 1056;
- callfunc "MobPoints";
- end;
-
-On1057:
- set @mobID, 1057;
- callfunc "MobPoints";
- end;
-
-On1060:
- set @mobID, 1060;
- callfunc "MobPoints";
- end;
-
-On1108:
- set @mobID, 1108;
- callfunc "MobPoints";
- end;
-}
+002-5,37,89,12,7|monster|AngryFireGoblin|1108,3,100000ms,30000ms
+002-5,33,76,3,11|monster|CaveMaggot|1056,3,100000ms,30000ms
+002-5,40,68,7,5|monster|AngryScorpion|1057,3,100000ms,30000ms
+002-5,40,38,18,5|monster|Archant|1060,3,100000ms,30000ms
+002-5,56,97,2,5|monster|Archant|1060,1,100000ms,30000ms
+002-5,68,100,12,2|monster|YellowSlime|1007,4,100000ms,30000ms
+002-5,91,80,1,5|monster|Archant|1060,1,100000ms,30000ms
+002-5,89,94,1,5|monster|Archant|1060,1,100000ms,30000ms
+002-5,74,78,1,5|monster|Archant|1060,2,100000ms,30000ms
+002-5,94,72,2,4|monster|Archant|1060,1,100000ms,30000ms
+002-5,90,61,6,2|monster|YellowSlime|1007,1,100000ms,30000ms
+002-5,74,35,1,5|monster|Archant|1060,1,100000ms,30000ms
+002-5,84,33,1,5|monster|Archant|1060,1,100000ms,30000ms
+002-5,84,46,1,5|monster|Archant|1060,1,100000ms,30000ms
+002-5,99,38,1,5|monster|Archant|1060,1,100000ms,30000ms
+002-5,93,38,8,2|monster|YellowSlime|1007,2,100000ms,30000ms
+002-5,62,62,5,43|monster|AngryFireGoblin|1108,3,100000ms,30000ms
diff --git a/world/map/npc/002-5/_nodes.txt b/world/map/npc/002-5/_nodes.txt
new file mode 100644
index 00000000..d3890f4a
--- /dev/null
+++ b/world/map/npc/002-5/_nodes.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Deep Desert Mines nodes
+
+// (no nodes)
diff --git a/world/map/npc/004-3/_import.txt b/world/map/npc/004-3/_import.txt
index 1c5bc475..97d4e69b 100644
--- a/world/map/npc/004-3/_import.txt
+++ b/world/map/npc/004-3/_import.txt
@@ -2,5 +2,6 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 004-3
npc: npc/004-3/_mobs.txt
+npc: npc/004-3/_nodes.txt
npc: npc/004-3/_warps.txt
npc: npc/004-3/mapflags.txt
diff --git a/world/map/npc/004-3/_mobs.txt b/world/map/npc/004-3/_mobs.txt
index dce2ec02..26c4d595 100644
--- a/world/map/npc/004-3/_mobs.txt
+++ b/world/map/npc/004-3/_mobs.txt
@@ -1,31 +1,10 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Pirate Caves First Floor mobs
-004-3,43,72,7,8|monster|Thug|1119,2,100000ms,30000ms,Mob004-3::On1119
-004-3,43,72,7,8|monster|Swashbuckler|1120,1,100000ms,30000ms,Mob004-3::On1120
-004-3,43,72,7,8|monster|Grenadier|1121,1,100000ms,30000ms,Mob004-3::On1121
-004-3,28,69,8,2|monster|Thug|1119,2,100000ms,30000ms,Mob004-3::On1119
-004-3,71,63,7,8|monster|Thug|1119,2,100000ms,30000ms,Mob004-3::On1119
-004-3,39,39,7,3|monster|Swashbuckler|1120,2,100000ms,30000ms,Mob004-3::On1120
-004-3,71,63,7,8|monster|Grenadier|1121,1,100000ms,30000ms,Mob004-3::On1121
-
-
-004-3,0,0,0|script|Mob004-3|32767
-{
- end;
-
-On1119:
- set @mobID, 1119;
- callfunc "MobPoints";
- end;
-
-On1120:
- set @mobID, 1120;
- callfunc "MobPoints";
- end;
-
-On1121:
- set @mobID, 1121;
- callfunc "MobPoints";
- end;
-}
+004-3,43,72,7,8|monster|Thug|1119,2,100000ms,30000ms
+004-3,43,72,7,8|monster|Swashbuckler|1120,1,100000ms,30000ms
+004-3,43,72,7,8|monster|Grenadier|1121,1,100000ms,30000ms
+004-3,28,69,8,2|monster|Thug|1119,2,100000ms,30000ms
+004-3,71,63,7,8|monster|Thug|1119,2,100000ms,30000ms
+004-3,39,39,7,3|monster|Swashbuckler|1120,2,100000ms,30000ms
+004-3,71,63,7,8|monster|Grenadier|1121,1,100000ms,30000ms
diff --git a/world/map/npc/004-3/_nodes.txt b/world/map/npc/004-3/_nodes.txt
new file mode 100644
index 00000000..9ebc3e80
--- /dev/null
+++ b/world/map/npc/004-3/_nodes.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Pirate Caves First Floor nodes
+
+// (no nodes)
diff --git a/world/map/npc/004-4/_import.txt b/world/map/npc/004-4/_import.txt
index d241e73e..6b0490c3 100644
--- a/world/map/npc/004-4/_import.txt
+++ b/world/map/npc/004-4/_import.txt
@@ -2,5 +2,6 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 004-4
npc: npc/004-4/_mobs.txt
+npc: npc/004-4/_nodes.txt
npc: npc/004-4/_warps.txt
npc: npc/004-4/mapflags.txt
diff --git a/world/map/npc/004-4/_mobs.txt b/world/map/npc/004-4/_mobs.txt
index 525a7215..0216ba6d 100644
--- a/world/map/npc/004-4/_mobs.txt
+++ b/world/map/npc/004-4/_mobs.txt
@@ -1,33 +1,12 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Pirate Caves Second Floor mobs
-004-4,36,62,5,20|monster|Grenadier|1121,1,100000ms,30000ms,Mob004-4::On1121
-004-4,37,61,5,21|monster|Swashbuckler|1120,2,100000ms,30000ms,Mob004-4::On1120
-004-4,62,52,12,7|monster|Thug|1119,2,100000ms,30000ms,Mob004-4::On1119
-004-4,34,87,12,7|monster|Thug|1119,2,100000ms,30000ms,Mob004-4::On1119
-004-4,37,62,6,22|monster|Thug|1119,2,100000ms,30000ms,Mob004-4::On1119
-004-4,34,88,10,6|monster|Swashbuckler|1120,2,100000ms,30000ms,Mob004-4::On1120
-004-4,63,52,10,6|monster|Swashbuckler|1120,2,100000ms,30000ms,Mob004-4::On1120
-004-4,62,52,11,4|monster|Grenadier|1121,1,100000ms,30000ms,Mob004-4::On1121
-004-4,34,88,10,4|monster|Grenadier|1121,1,100000ms,30000ms,Mob004-4::On1121
-
-
-004-4,0,0,0|script|Mob004-4|32767
-{
- end;
-
-On1119:
- set @mobID, 1119;
- callfunc "MobPoints";
- end;
-
-On1120:
- set @mobID, 1120;
- callfunc "MobPoints";
- end;
-
-On1121:
- set @mobID, 1121;
- callfunc "MobPoints";
- end;
-}
+004-4,36,62,5,20|monster|Grenadier|1121,1,100000ms,30000ms
+004-4,37,61,5,21|monster|Swashbuckler|1120,2,100000ms,30000ms
+004-4,62,52,12,7|monster|Thug|1119,2,100000ms,30000ms
+004-4,34,87,12,7|monster|Thug|1119,2,100000ms,30000ms
+004-4,37,62,6,22|monster|Thug|1119,2,100000ms,30000ms
+004-4,34,88,10,6|monster|Swashbuckler|1120,2,100000ms,30000ms
+004-4,63,52,10,6|monster|Swashbuckler|1120,2,100000ms,30000ms
+004-4,62,52,11,4|monster|Grenadier|1121,1,100000ms,30000ms
+004-4,34,88,10,4|monster|Grenadier|1121,1,100000ms,30000ms
diff --git a/world/map/npc/004-4/_nodes.txt b/world/map/npc/004-4/_nodes.txt
new file mode 100644
index 00000000..2ca90a45
--- /dev/null
+++ b/world/map/npc/004-4/_nodes.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Pirate Caves Second Floor nodes
+
+// (no nodes)
diff --git a/world/map/npc/004-5/_import.txt b/world/map/npc/004-5/_import.txt
index 3114b117..234d6cde 100644
--- a/world/map/npc/004-5/_import.txt
+++ b/world/map/npc/004-5/_import.txt
@@ -2,6 +2,7 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 004-5
npc: npc/004-5/_mobs.txt
+npc: npc/004-5/_nodes.txt
npc: npc/004-5/_warps.txt
npc: npc/004-5/chest.txt
npc: npc/004-5/mapflags.txt
diff --git a/world/map/npc/004-5/_mobs.txt b/world/map/npc/004-5/_mobs.txt
index 2d3acc7e..b7425fb5 100644
--- a/world/map/npc/004-5/_mobs.txt
+++ b/world/map/npc/004-5/_mobs.txt
@@ -1,36 +1,15 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Pirate Den mobs
-004-5,41,70,6,5|monster|Grenadier|1121,1,100000ms,30000ms,Mob004-5::On1121
-004-5,41,70,7,3|monster|Swashbuckler|1120,2,100000ms,30000ms,Mob004-5::On1120
-004-5,40,70,8,2|monster|Thug|1119,2,100000ms,30000ms,Mob004-5::On1119
-004-5,35,86,6,5|monster|Grenadier|1121,1,100000ms,30000ms,Mob004-5::On1121
-004-5,34,86,8,2|monster|Thug|1119,2,100000ms,30000ms,Mob004-5::On1119
-004-5,35,86,7,3|monster|Swashbuckler|1120,2,100000ms,30000ms,Mob004-5::On1120
-004-5,54,38,6,5|monster|Grenadier|1121,1,100000ms,30000ms,Mob004-5::On1121
-004-5,53,38,8,2|monster|Thug|1119,2,100000ms,30000ms,Mob004-5::On1119
-004-5,54,38,7,3|monster|Swashbuckler|1120,2,100000ms,30000ms,Mob004-5::On1120
-004-5,81,38,6,5|monster|Grenadier|1121,1,100000ms,30000ms,Mob004-5::On1121
-004-5,80,38,8,2|monster|Thug|1119,2,100000ms,30000ms,Mob004-5::On1119
-004-5,81,38,7,3|monster|Swashbuckler|1120,2,100000ms,30000ms,Mob004-5::On1120
-
-
-004-5,0,0,0|script|Mob004-5|32767
-{
- end;
-
-On1119:
- set @mobID, 1119;
- callfunc "MobPoints";
- end;
-
-On1120:
- set @mobID, 1120;
- callfunc "MobPoints";
- end;
-
-On1121:
- set @mobID, 1121;
- callfunc "MobPoints";
- end;
-}
+004-5,41,70,6,5|monster|Grenadier|1121,1,100000ms,30000ms
+004-5,41,70,7,3|monster|Swashbuckler|1120,2,100000ms,30000ms
+004-5,40,70,8,2|monster|Thug|1119,2,100000ms,30000ms
+004-5,35,86,6,5|monster|Grenadier|1121,1,100000ms,30000ms
+004-5,34,86,8,2|monster|Thug|1119,2,100000ms,30000ms
+004-5,35,86,7,3|monster|Swashbuckler|1120,2,100000ms,30000ms
+004-5,54,38,6,5|monster|Grenadier|1121,1,100000ms,30000ms
+004-5,53,38,8,2|monster|Thug|1119,2,100000ms,30000ms
+004-5,54,38,7,3|monster|Swashbuckler|1120,2,100000ms,30000ms
+004-5,81,38,6,5|monster|Grenadier|1121,1,100000ms,30000ms
+004-5,80,38,8,2|monster|Thug|1119,2,100000ms,30000ms
+004-5,81,38,7,3|monster|Swashbuckler|1120,2,100000ms,30000ms
diff --git a/world/map/npc/004-5/_nodes.txt b/world/map/npc/004-5/_nodes.txt
new file mode 100644
index 00000000..55ea7bb3
--- /dev/null
+++ b/world/map/npc/004-5/_nodes.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Pirate Den nodes
+
+// (no nodes)
diff --git a/world/map/npc/005-3/_import.txt b/world/map/npc/005-3/_import.txt
index a1fd70bd..415451c3 100644
--- a/world/map/npc/005-3/_import.txt
+++ b/world/map/npc/005-3/_import.txt
@@ -2,5 +2,6 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 005-3
npc: npc/005-3/_mobs.txt
+npc: npc/005-3/_nodes.txt
npc: npc/005-3/_warps.txt
npc: npc/005-3/mapflags.txt
diff --git a/world/map/npc/005-3/_mobs.txt b/world/map/npc/005-3/_mobs.txt
index 63e58847..79168aba 100644
--- a/world/map/npc/005-3/_mobs.txt
+++ b/world/map/npc/005-3/_mobs.txt
@@ -1,27 +1,6 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Snake Pit mobs
-005-3,58,57,62,57|monster|Snake|1010,50,100000ms,30000ms,Mob005-3::On1010
-005-3,58,57,62,57|monster|BlackScorpion|1009,15,100000ms,30000ms,Mob005-3::On1009
-005-3,58,57,62,57|monster|GiantMaggot|1006,20,100000ms,30000ms,Mob005-3::On1006
-
-
-005-3,0,0,0|script|Mob005-3|32767
-{
- end;
-
-On1006:
- set @mobID, 1006;
- callfunc "MobPoints";
- end;
-
-On1009:
- set @mobID, 1009;
- callfunc "MobPoints";
- end;
-
-On1010:
- set @mobID, 1010;
- callfunc "MobPoints";
- end;
-}
+005-3,58,57,62,57|monster|Snake|1010,50,100000ms,30000ms
+005-3,58,57,62,57|monster|BlackScorpion|1009,15,100000ms,30000ms
+005-3,58,57,62,57|monster|GiantMaggot|1006,20,100000ms,30000ms
diff --git a/world/map/npc/005-3/_nodes.txt b/world/map/npc/005-3/_nodes.txt
new file mode 100644
index 00000000..0e704ee5
--- /dev/null
+++ b/world/map/npc/005-3/_nodes.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Snake Pit nodes
+
+// (no nodes)
diff --git a/world/map/npc/006-1/_import.txt b/world/map/npc/006-1/_import.txt
index 0885c461..44f1375d 100644
--- a/world/map/npc/006-1/_import.txt
+++ b/world/map/npc/006-1/_import.txt
@@ -2,6 +2,7 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 006-1
npc: npc/006-1/_mobs.txt
+npc: npc/006-1/_nodes.txt
npc: npc/006-1/_warps.txt
npc: npc/006-1/mapflags.txt
npc: npc/006-1/mika.txt
diff --git a/world/map/npc/006-1/_mobs.txt b/world/map/npc/006-1/_mobs.txt
index 2288ec92..c18464c8 100644
--- a/world/map/npc/006-1/_mobs.txt
+++ b/world/map/npc/006-1/_mobs.txt
@@ -1,55 +1,24 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Desert Mountains mobs
-006-1,49,52,7,3|monster|Snake|1010,1,100000ms,30000ms,Mob006-1::On1010
-006-1,53,36,16,13|monster|MountainSnake|1026,3,150000ms,10000ms,Mob006-1::On1026
-006-1,89,26,33,13|monster|MountainSnake|1026,5,15000ms,75000ms,Mob006-1::On1026
-006-1,113,41,12,37|monster|MountainSnake|1026,8,15000ms,75000ms,Mob006-1::On1026
-006-1,113,51,6,3|monster|MountainSnake|1026,3,15000ms,75000ms,Mob006-1::On1026
-006-1,86,46,29,5|monster|MountainSnake|1026,3,15000ms,75000ms,Mob006-1::On1026
-006-1,105,73,21,14|monster|MountainSnake|1026,3,15000ms,75000ms,Mob006-1::On1026
-006-1,73,102,8,13|monster|MountainSnake|1026,4,15000ms,75000ms,Mob006-1::On1026
-006-1,104,100,11,15|monster|MountainSnake|1026,8,15000ms,75000ms,Mob006-1::On1026
-006-1,82,72,25,16|monster|MountainSnake|1026,8,15000ms,75000ms,Mob006-1::On1026
-006-1,95,114,17,4|monster|MountainSnake|1026,5,15000ms,75000ms,Mob006-1::On1026
-006-1,57,119,18,2|monster|MountainSnake|1026,4,15000ms,75000ms,Mob006-1::On1026
-006-1,33,97,27,33|monster|Scorpion|1003,10,100000ms,30000ms,Mob006-1::On1003
-006-1,58,49,3,3|monster|GreenSlime|1005,3,100000ms,30000ms,Mob006-1::On1005
-006-1,34,50,5,4|monster|Snake|1010,2,40000ms,50000ms,Mob006-1::On1010
-006-1,96,92,20,48|monster|Snake|1010,2,40000ms,50000ms,Mob006-1::On1010
-006-1,35,97,28,29|monster|Maggot|1002,20,100000ms,30000ms,Mob006-1::On1002
-006-1,28,73,3,2|monster|GreenSlime|1005,2,100000ms,30000ms,Mob006-1::On1005
-006-1,33,59,3,2|monster|GreenSlime|1005,2,100000ms,30000ms,Mob006-1::On1005
-006-1,37,73,7,3|monster|Snake|1010,1,100000ms,30000ms,Mob006-1::On1010
-006-1,100,36,38,24|monster|Snake|1010,2,40000ms,50000ms,Mob006-1::On1010
-
-
-006-1,0,0,0|script|Mob006-1|32767
-{
- end;
-
-On1002:
- set @mobID, 1002;
- callfunc "MobPoints";
- end;
-
-On1003:
- set @mobID, 1003;
- callfunc "MobPoints";
- end;
-
-On1005:
- set @mobID, 1005;
- callfunc "MobPoints";
- end;
-
-On1010:
- set @mobID, 1010;
- callfunc "MobPoints";
- end;
-
-On1026:
- set @mobID, 1026;
- callfunc "MobPoints";
- end;
-}
+006-1,49,52,7,3|monster|Snake|1010,1,100000ms,30000ms
+006-1,53,36,16,13|monster|MountainSnake|1026,3,150000ms,10000ms
+006-1,89,26,33,13|monster|MountainSnake|1026,5,15000ms,75000ms
+006-1,113,41,12,37|monster|MountainSnake|1026,8,15000ms,75000ms
+006-1,113,51,6,3|monster|MountainSnake|1026,3,15000ms,75000ms
+006-1,86,46,29,5|monster|MountainSnake|1026,3,15000ms,75000ms
+006-1,105,73,21,14|monster|MountainSnake|1026,3,15000ms,75000ms
+006-1,73,102,8,13|monster|MountainSnake|1026,4,15000ms,75000ms
+006-1,104,100,11,15|monster|MountainSnake|1026,8,15000ms,75000ms
+006-1,82,72,25,16|monster|MountainSnake|1026,8,15000ms,75000ms
+006-1,95,114,17,4|monster|MountainSnake|1026,5,15000ms,75000ms
+006-1,57,119,18,2|monster|MountainSnake|1026,4,15000ms,75000ms
+006-1,33,97,27,33|monster|Scorpion|1003,10,100000ms,30000ms
+006-1,58,49,3,3|monster|GreenSlime|1005,3,100000ms,30000ms
+006-1,34,50,5,4|monster|Snake|1010,2,40000ms,50000ms
+006-1,96,92,20,48|monster|Snake|1010,2,40000ms,50000ms
+006-1,35,97,28,29|monster|Maggot|1002,20,100000ms,30000ms
+006-1,28,73,3,2|monster|GreenSlime|1005,2,100000ms,30000ms
+006-1,33,59,3,2|monster|GreenSlime|1005,2,100000ms,30000ms
+006-1,37,73,7,3|monster|Snake|1010,1,100000ms,30000ms
+006-1,100,36,38,24|monster|Snake|1010,2,40000ms,50000ms
diff --git a/world/map/npc/006-1/_nodes.txt b/world/map/npc/006-1/_nodes.txt
new file mode 100644
index 00000000..e53e7619
--- /dev/null
+++ b/world/map/npc/006-1/_nodes.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Desert Mountains nodes
+
+// (no nodes)
diff --git a/world/map/npc/006-1/spirit.txt b/world/map/npc/006-1/spirit.txt
index 8c7155fa..68e1bbe7 100644
--- a/world/map/npc/006-1/spirit.txt
+++ b/world/map/npc/006-1/spirit.txt
@@ -178,7 +178,7 @@ L_Next5:
mes "\"Kekeke... excellent! Yes, here goes your first spell, the flying backpack! If you are overloaded, it will take the load off your shoulders.\"";
next;
mes "[Earth Spirit]";
- mes "\"Take a cocoon, living or dead, and suffuse it in magic. Whisper '" + getspellinvocation("flying-backpack") + "', and feel it float!\"";
+ mes "\"Take a cocoon, living or dead, and suffuse it in magic. Whisper '" + get(.invocation$, "flying-backpack") + "', and feel it float!\"";
goto L_Q_magic_finish;
L_Q_magic_3:
@@ -196,7 +196,7 @@ L_Next6:
mes "\"Yeees, good! This one is a protection spell, making your skin harder. You need a hard spike for it, though. Hold that spike in your hands, and focus on it.\"";
next;
mes "[Earth Spirit]";
- mes "\"Next, say '" + getspellinvocation("protect") + "', and feel your skin grow rigid! Very useful against stings and stabs and pokes and pricks and that sort of stuff.\"";
+ mes "\"Next, say '" + get(.invocation$, "protect") + "', and feel your skin grow rigid! Very useful against stings and stabs and pokes and pricks and that sort of stuff.\"";
goto L_Q_magic_finish;
L_Q_magic_4:
diff --git a/world/map/npc/006-1/tree.txt b/world/map/npc/006-1/tree.txt
index 6740312e..57209d24 100644
--- a/world/map/npc/006-1/tree.txt
+++ b/world/map/npc/006-1/tree.txt
@@ -160,9 +160,3 @@ L_Close:
callfunc "QuestTreeTouch";
close;
}
-
-006-1,83,59,0|script|#DruidTree1#_M|400
-{
- callfunc "QuestTreeTouch";
- close;
-}
diff --git a/world/map/npc/006-2/_import.txt b/world/map/npc/006-2/_import.txt
index 0730bd46..2d22f31c 100644
--- a/world/map/npc/006-2/_import.txt
+++ b/world/map/npc/006-2/_import.txt
@@ -2,6 +2,7 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 006-2
npc: npc/006-2/_mobs.txt
+npc: npc/006-2/_nodes.txt
npc: npc/006-2/_warps.txt
npc: npc/006-2/mapflags.txt
npc: npc/006-2/npcs.txt
diff --git a/world/map/npc/006-2/_mobs.txt b/world/map/npc/006-2/_mobs.txt
index 13ee9057..e3fe486b 100644
--- a/world/map/npc/006-2/_mobs.txt
+++ b/world/map/npc/006-2/_mobs.txt
@@ -1,9 +1,3 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Pachua's Village mobs
-
-
-006-2,0,0,0|script|Mob006-2|32767
-{
- end;
-}
diff --git a/world/map/npc/006-2/_nodes.txt b/world/map/npc/006-2/_nodes.txt
new file mode 100644
index 00000000..ae0f0147
--- /dev/null
+++ b/world/map/npc/006-2/_nodes.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Pachua's Village nodes
+
+// (no nodes)
diff --git a/world/map/npc/006-3/_import.txt b/world/map/npc/006-3/_import.txt
index 6302c3a8..8e52641e 100644
--- a/world/map/npc/006-3/_import.txt
+++ b/world/map/npc/006-3/_import.txt
@@ -2,5 +2,6 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 006-3
npc: npc/006-3/_mobs.txt
+npc: npc/006-3/_nodes.txt
npc: npc/006-3/_warps.txt
npc: npc/006-3/mapflags.txt
diff --git a/world/map/npc/006-3/_mobs.txt b/world/map/npc/006-3/_mobs.txt
index 3fa25c29..93d6102c 100644
--- a/world/map/npc/006-3/_mobs.txt
+++ b/world/map/npc/006-3/_mobs.txt
@@ -1,55 +1,29 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Desert Mountain Cave mobs
-006-3,108,25,36,8|monster|MountainSnake|1026,3,15000ms,90000ms,Mob006-3::On1026
-006-3,99,50,14,13|monster|MountainSnake|1026,1,15000ms,90000ms,Mob006-3::On1026
-006-3,89,63,14,11|monster|MountainSnake|1026,2,15000ms,90000ms,Mob006-3::On1026
-006-3,86,90,29,9|monster|MountainSnake|1026,3,15000ms,90000ms,Mob006-3::On1026
-006-3,109,78,12,9|monster|MountainSnake|1026,1,15000ms,90000ms,Mob006-3::On1026
-006-3,119,117,15,14|monster|MountainSnake|1026,4,15000ms,90000ms,Mob006-3::On1026
-006-3,106,64,14,17|monster|MountainSnake|1026,3,15000ms,90000ms,Mob006-3::On1026
-006-3,65,71,31,35|monster|MountainSnake|1026,10,15000ms,90000ms,Mob006-3::On1026
-006-3,57,105,27,30|monster|MountainSnake|1026,8,15000ms,90000ms,Mob006-3::On1026
-006-3,73,120,16,5|monster|MountainSnake|1026,3,15000ms,90000ms,Mob006-3::On1026
-006-3,117,54,11,9|monster|MountainSnake|1026,4,15000ms,90000ms,Mob006-3::On1026
-006-3,123,62,10,5|monster|MountainSnake|1026,3,15000ms,90000ms,Mob006-3::On1026
-006-3,72,36,24,25|monster|MountainSnake|1026,10,15000ms,90000ms,Mob006-3::On1026
-006-3,84,27,5,7|monster|MountainSnake|1026,1,15000ms,90000ms,Mob006-3::On1026
-006-3,40,40,36,28|monster|MountainSnake|1026,8,15000ms,90000ms,Mob006-3::On1026
-006-3,34,60,27,11|monster|MountainSnake|1026,3,15000ms,90000ms,Mob006-3::On1026
-006-3,87,74,26,9|monster|RedSlime|1008,3,15000ms,10000ms,Mob006-3::On1008
-006-3,120,76,9,21|monster|RedSlime|1008,3,15000ms,10000ms,Mob006-3::On1008
-006-3,101,85,14,8|monster|RedSlime|1008,4,15000ms,10000ms,Mob006-3::On1008
-006-3,44,124,29,7|monster|MountainSnake|1026,5,15000ms,90000ms,Mob006-3::On1026
-006-3,90,125,17,7|monster|MountainSnake|1026,5,15000ms,90000ms,Mob006-3::On1026
-006-3,30,88,13,20|monster|RedSlime|1008,3,90000ms,30000ms,Mob006-3::On1008
-006-3,122,98,10,16|monster|Spider|1012,3,90000ms,30000ms,Mob006-3::On1012
-006-3,112,104,7,13|monster|Spider|1012,1,90000ms,30000ms,Mob006-3::On1012
-006-3,103,108,9,9|monster|Spider|1012,1,90000ms,30000ms,Mob006-3::On1012
-006-3,83,107,13,14|monster|YellowSlime|1007,6,90000ms,30000ms,Mob006-3::On1007
-
-
-006-3,0,0,0|script|Mob006-3|32767
-{
- end;
-
-On1007:
- set @mobID, 1007;
- callfunc "MobPoints";
- end;
-
-On1008:
- set @mobID, 1008;
- callfunc "MobPoints";
- end;
-
-On1012:
- set @mobID, 1012;
- callfunc "MobPoints";
- end;
-
-On1026:
- set @mobID, 1026;
- callfunc "MobPoints";
- end;
-}
+006-3,108,25,36,8|monster|MountainSnake|1026,3,15000ms,90000ms
+006-3,99,50,14,13|monster|MountainSnake|1026,1,15000ms,90000ms
+006-3,89,63,14,11|monster|MountainSnake|1026,2,15000ms,90000ms
+006-3,86,90,29,9|monster|MountainSnake|1026,3,15000ms,90000ms
+006-3,109,78,12,9|monster|MountainSnake|1026,1,15000ms,90000ms
+006-3,119,117,15,14|monster|MountainSnake|1026,4,15000ms,90000ms
+006-3,106,64,14,17|monster|MountainSnake|1026,3,15000ms,90000ms
+006-3,65,71,31,35|monster|MountainSnake|1026,10,15000ms,90000ms
+006-3,57,105,27,30|monster|MountainSnake|1026,8,15000ms,90000ms
+006-3,73,120,16,5|monster|MountainSnake|1026,3,15000ms,90000ms
+006-3,117,54,11,9|monster|MountainSnake|1026,4,15000ms,90000ms
+006-3,123,62,10,5|monster|MountainSnake|1026,3,15000ms,90000ms
+006-3,72,36,24,25|monster|MountainSnake|1026,10,15000ms,90000ms
+006-3,84,27,5,7|monster|MountainSnake|1026,1,15000ms,90000ms
+006-3,40,40,36,28|monster|MountainSnake|1026,8,15000ms,90000ms
+006-3,34,60,27,11|monster|MountainSnake|1026,3,15000ms,90000ms
+006-3,87,74,26,9|monster|RedSlime|1008,3,15000ms,10000ms
+006-3,120,76,9,21|monster|RedSlime|1008,3,15000ms,10000ms
+006-3,101,85,14,8|monster|RedSlime|1008,4,15000ms,10000ms
+006-3,44,124,29,7|monster|MountainSnake|1026,5,15000ms,90000ms
+006-3,90,125,17,7|monster|MountainSnake|1026,5,15000ms,90000ms
+006-3,30,88,13,20|monster|RedSlime|1008,3,90000ms,30000ms
+006-3,122,98,10,16|monster|Spider|1012,3,90000ms,30000ms
+006-3,112,104,7,13|monster|Spider|1012,1,90000ms,30000ms
+006-3,103,108,9,9|monster|Spider|1012,1,90000ms,30000ms
+006-3,83,107,13,14|monster|YellowSlime|1007,6,90000ms,30000ms
diff --git a/world/map/npc/006-3/_nodes.txt b/world/map/npc/006-3/_nodes.txt
new file mode 100644
index 00000000..c039867e
--- /dev/null
+++ b/world/map/npc/006-3/_nodes.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Desert Mountain Cave nodes
+
+// (no nodes)
diff --git a/world/map/npc/007-1/_import.txt b/world/map/npc/007-1/_import.txt
index eca15081..f6f86a36 100644
--- a/world/map/npc/007-1/_import.txt
+++ b/world/map/npc/007-1/_import.txt
@@ -2,6 +2,7 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 007-1
npc: npc/007-1/_mobs.txt
+npc: npc/007-1/_nodes.txt
npc: npc/007-1/_warps.txt
npc: npc/007-1/mapflags.txt
npc: npc/007-1/voltain.txt
diff --git a/world/map/npc/007-1/_mobs.txt b/world/map/npc/007-1/_mobs.txt
index 846c9fc5..e160e414 100644
--- a/world/map/npc/007-1/_mobs.txt
+++ b/world/map/npc/007-1/_mobs.txt
@@ -1,63 +1,12 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Woodland mobs
-007-1,0,0,0,0|monster|PinkFlower|1014,17,100000ms,30000ms,Mob007-1::On1014
-007-1,0,0,0,0|monster|SpikyMushroom|1019,15,100000ms,30000ms,Mob007-1::On1019
-007-1,0,0,0,0|monster|Snail|1041,25,100000ms,30000ms,Mob007-1::On1041
-007-1,0,0,0,0|monster|MauvePlant|1029,3,270000ms,180000ms,Mob007-1::On1029
-007-1,0,0,0,0|monster|GambogePlant|1031,1,2700000ms,1800000ms,Mob007-1::On1031
-007-1,0,0,0,0|monster|Silkworm|1035,2,60000ms,30000ms,Mob007-1::On1035
-007-1,0,0,0,0|monster|CloverPatch|1037,2,0ms,1000ms,Mob007-1::On1037
-007-1,0,0,0,0|monster|Squirrel|1038,25,30ms,20ms,Mob007-1::On1038
-007-1,0,0,0,0|monster|Butterfly|1055,10,30ms,20ms,Mob007-1::On1055
-
-
-007-1,0,0,0|script|Mob007-1|32767
-{
- end;
-
-On1014:
- set @mobID, 1014;
- callfunc "MobPoints";
- end;
-
-On1019:
- set @mobID, 1019;
- callfunc "MobPoints";
- end;
-
-On1029:
- set @mobID, 1029;
- callfunc "MobPoints";
- end;
-
-On1031:
- set @mobID, 1031;
- callfunc "MobPoints";
- end;
-
-On1035:
- set @mobID, 1035;
- callfunc "MobPoints";
- end;
-
-On1037:
- set @mobID, 1037;
- callfunc "MobPoints";
- end;
-
-On1038:
- set @mobID, 1038;
- callfunc "MobPoints";
- end;
-
-On1041:
- set @mobID, 1041;
- callfunc "MobPoints";
- end;
-
-On1055:
- set @mobID, 1055;
- callfunc "MobPoints";
- end;
-}
+007-1,0,0,0,0|monster|PinkFlower|1014,17,100000ms,30000ms
+007-1,0,0,0,0|monster|SpikyMushroom|1019,15,100000ms,30000ms
+007-1,0,0,0,0|monster|Snail|1041,25,100000ms,30000ms
+007-1,0,0,0,0|monster|MauvePlant|1029,3,270000ms,180000ms
+007-1,0,0,0,0|monster|GambogePlant|1031,1,2700000ms,1800000ms
+007-1,0,0,0,0|monster|Silkworm|1035,2,60000ms,30000ms
+007-1,0,0,0,0|monster|CloverPatch|1037,2,0ms,1000ms
+007-1,0,0,0,0|monster|Squirrel|1038,25,30ms,20ms
+007-1,0,0,0,0|monster|Butterfly|1055,10,30ms,20ms
diff --git a/world/map/npc/007-1/_nodes.txt b/world/map/npc/007-1/_nodes.txt
new file mode 100644
index 00000000..12c08221
--- /dev/null
+++ b/world/map/npc/007-1/_nodes.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Woodland nodes
+
+// (no nodes)
diff --git a/world/map/npc/007-2/_import.txt b/world/map/npc/007-2/_import.txt
index bce6eb02..e68bb71b 100644
--- a/world/map/npc/007-2/_import.txt
+++ b/world/map/npc/007-2/_import.txt
@@ -2,5 +2,6 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 007-2
npc: npc/007-2/_mobs.txt
+npc: npc/007-2/_nodes.txt
npc: npc/007-2/_warps.txt
npc: npc/007-2/witch.txt
diff --git a/world/map/npc/007-2/_mobs.txt b/world/map/npc/007-2/_mobs.txt
index ca392cc6..1d91c286 100644
--- a/world/map/npc/007-2/_mobs.txt
+++ b/world/map/npc/007-2/_mobs.txt
@@ -1,9 +1,3 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Illia forsaken inn mobs
-
-
-007-2,0,0,0|script|Mob007-2|32767
-{
- end;
-}
diff --git a/world/map/npc/007-2/_nodes.txt b/world/map/npc/007-2/_nodes.txt
new file mode 100644
index 00000000..38010d03
--- /dev/null
+++ b/world/map/npc/007-2/_nodes.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Illia forsaken inn nodes
+
+// (no nodes)
diff --git a/world/map/npc/007-2/witch.txt b/world/map/npc/007-2/witch.txt
index 557b5f62..360f2885 100644
--- a/world/map/npc/007-2/witch.txt
+++ b/world/map/npc/007-2/witch.txt
@@ -23,7 +23,7 @@
set @illia_iced_water, 4;
set $@illia_min_level, 90;
- if (getgmlevel() >= 40 && getequipid(equip_head) == 647)
+ if ((GM >= DBG_VALIA || debug) && getequipid(equip_head) == 647)
goto L_DeveloperBoard;
if (BaseLevel < $@illia_min_level) goto L_Unexperienced;
@@ -35,22 +35,7 @@
end;
L_DeveloperBoard:
- mes "[Developer Board]";
- mes "$Illia_Luvia_Harvest: "+$Illia_Luvia_Harvest;
- mes "$Illia_Win_Counter: "+$Illia_Win_Counter;
- next;
- mes "[Developer Board]";
- mes "$@illia_progress: "+$@illia_progress;
- if ($@illia_begin_time > 0)
- mes "Time: "+(gettimetick(2) - $@illia_begin_time)+"/"+$@illia_max_time;
- mes "";
- mes "$@illia_level_1_progress: "+$@illia_level_1_progress;
- mes "$@illia_level_2_progress: "+$@illia_level_2_progress;
- mes "$@illia_level_3_progress: "+$@illia_level_3_progress;
- mes "$@illia_level_4_progress: "+$@illia_level_4_progress;
- mes "$@illia_level_5_progress: "+$@illia_level_5_progress;
- mes "$@illia_level_6_progress: "+$@illia_level_6_progress;
- mes "$@illia_level_7_progress: "+$@illia_level_7_progress;
+ callfunc "IlliaDebug";
close;
L_Introduce:
@@ -639,10 +624,10 @@ OnTimer34000:
end;
// Trigger 4 areatimers to show the teleport spell
// This is better looking than a basic areawarp
- areatimer "007-2", 0, 0, 57, 55, 3000, "Valia::OnWarpHero";
- areatimer "007-2", 0, 0, 57, 55, 3500, "Valia::OnWarpHelper1";
- areatimer "007-2", 0, 0, 57, 55, 4000, "Valia::OnWarpHelper2";
- areatimer "007-2", 0, 0, 57, 55, 4500, "Valia::OnWarpHelper3";
+ areatimer 0, "007-2", 0, 0, 57, 55, 3000, "Valia::OnWarpHero";
+ areatimer 0, "007-2", 0, 0, 57, 55, 3500, "Valia::OnWarpHelper1";
+ areatimer 0, "007-2", 0, 0, 57, 55, 4000, "Valia::OnWarpHelper2";
+ areatimer 0, "007-2", 0, 0, 57, 55, 4500, "Valia::OnWarpHelper3";
npctalk strnpcinfo(0), "Spiralis Major!";
misceffect FX_BLUE_MAGIC_CAST;
end;
@@ -1020,3 +1005,22 @@ end;
{
end;
}
+
+function|script|IlliaDebug
+{
+ mes "$Illia_Luvia_Harvest: "+$Illia_Luvia_Harvest;
+ mes "$Illia_Win_Counter: "+$Illia_Win_Counter;
+ mes "---";
+ mes "$@illia_progress: "+$@illia_progress;
+ if ($@illia_begin_time > 0)
+ mes "Time: "+(gettimetick(2) - $@illia_begin_time)+"/"+$@illia_max_time;
+ mes "---";
+ mes "$@illia_level_1_progress: "+$@illia_level_1_progress;
+ mes "$@illia_level_2_progress: "+$@illia_level_2_progress;
+ mes "$@illia_level_3_progress: "+$@illia_level_3_progress;
+ mes "$@illia_level_4_progress: "+$@illia_level_4_progress;
+ mes "$@illia_level_5_progress: "+$@illia_level_5_progress;
+ mes "$@illia_level_6_progress: "+$@illia_level_6_progress;
+ mes "$@illia_level_7_progress: "+$@illia_level_7_progress;
+ return;
+}
diff --git a/world/map/npc/008-1/_import.txt b/world/map/npc/008-1/_import.txt
index fc019095..630d4263 100644
--- a/world/map/npc/008-1/_import.txt
+++ b/world/map/npc/008-1/_import.txt
@@ -2,6 +2,7 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 008-1
npc: npc/008-1/_mobs.txt
+npc: npc/008-1/_nodes.txt
npc: npc/008-1/_warps.txt
npc: npc/008-1/andra.txt
npc: npc/008-1/annualeaster.txt
diff --git a/world/map/npc/008-1/_mobs.txt b/world/map/npc/008-1/_mobs.txt
index 33a425e3..6c077242 100644
--- a/world/map/npc/008-1/_mobs.txt
+++ b/world/map/npc/008-1/_mobs.txt
@@ -1,63 +1,12 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Hurnscald Outskirts mobs
-008-1,0,0,0,0|monster|PinkFlower|1014,10,20ms,0ms,Mob008-1::On1014
-008-1,0,0,0,0|monster|Pinkie|1018,18,20ms,0ms,Mob008-1::On1018
-008-1,0,0,0,0|monster|ManaBug|1131,18,30ms,0ms,Mob008-1::On1131
-008-1,0,0,0,0|monster|Maggot|1002,30,30ms,0ms,Mob008-1::On1002
-008-1,0,0,0,0|monster|MauvePlant|1029,2,270000ms,180000ms,Mob008-1::On1029
-008-1,0,0,0,0|monster|Silkworm|1035,2,60000ms,30000ms,Mob008-1::On1035
-008-1,0,0,0,0|monster|CloverPatch|1037,2,0ms,1000ms,Mob008-1::On1037
-008-1,0,0,0,0|monster|Squirrel|1038,10,30ms,20ms,Mob008-1::On1038
-008-1,0,0,0,0|monster|Butterfly|1055,10,30ms,20ms,Mob008-1::On1055
-
-
-008-1,0,0,0|script|Mob008-1|32767
-{
- end;
-
-On1002:
- set @mobID, 1002;
- callfunc "MobPoints";
- end;
-
-On1014:
- set @mobID, 1014;
- callfunc "MobPoints";
- end;
-
-On1018:
- set @mobID, 1018;
- callfunc "MobPoints";
- end;
-
-On1029:
- set @mobID, 1029;
- callfunc "MobPoints";
- end;
-
-On1035:
- set @mobID, 1035;
- callfunc "MobPoints";
- end;
-
-On1037:
- set @mobID, 1037;
- callfunc "MobPoints";
- end;
-
-On1038:
- set @mobID, 1038;
- callfunc "MobPoints";
- end;
-
-On1055:
- set @mobID, 1055;
- callfunc "MobPoints";
- end;
-
-On1131:
- set @mobID, 1131;
- callfunc "MobPoints";
- end;
-}
+008-1,0,0,0,0|monster|PinkFlower|1014,10,20ms,0ms
+008-1,0,0,0,0|monster|Pinkie|1018,18,20ms,0ms
+008-1,0,0,0,0|monster|ManaBug|1131,18,30ms,0ms
+008-1,0,0,0,0|monster|Maggot|1002,30,30ms,0ms
+008-1,0,0,0,0|monster|MauvePlant|1029,2,270000ms,180000ms
+008-1,0,0,0,0|monster|Silkworm|1035,2,60000ms,30000ms
+008-1,0,0,0,0|monster|CloverPatch|1037,2,0ms,1000ms
+008-1,0,0,0,0|monster|Squirrel|1038,10,30ms,20ms
+008-1,0,0,0,0|monster|Butterfly|1055,10,30ms,20ms
diff --git a/world/map/npc/008-1/_nodes.txt b/world/map/npc/008-1/_nodes.txt
new file mode 100644
index 00000000..d8b67583
--- /dev/null
+++ b/world/map/npc/008-1/_nodes.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Hurnscald Outskirts nodes
+
+// (no nodes)
diff --git a/world/map/npc/008-1/annualeaster.txt b/world/map/npc/008-1/annualeaster.txt
index b38aaa0a..1ec95cbe 100644
--- a/world/map/npc/008-1/annualeaster.txt
+++ b/world/map/npc/008-1/annualeaster.txt
@@ -8,250 +8,213 @@
// Easter cannot be before march 22 or after april 25, so activate
// the event in these days.
-
-function|script|AnnualEasterEvent
+008-1,0,0,0|script|Easter Eggs|32767
{
+
+//////////////////////////////////
+// puppet logic below
+
+ if (strnpcinfo(2) == "") end;
+ if (get(.disabled, "Easter Eggs") || $@isEaster < 1) goto L_Destroy;
+ set @npc_distance, 1;
+ callfunc "PCtoNPCRange";
+ if(@npc_check) end;
if ((gettimetick(2)-TUT_var < 5*7*86400) || (BaseLevel < 40)) //player must be created at least 5 weeks ago
goto L_EndTooYoung;
- callsub S_Read_Annual_Quest;
+ set @easter_year, (Annual_Quest & BYTE_1_MASK) >> BYTE_1_SHIFT;
+
if (#EASTERTIMEPENALTY == 0)
goto L_WarmUp;
// prevent clicking multiple times:
- if (gettimetick(2) < #EASTERTIMEPENALTY + $@EASTER_FOUND_WAIT_TIME)
+ if (gettimetick(2) < #EASTERTIMEPENALTY + get(.wait_time, "Easter Eggs"))
goto L_End2;
if (@easter_year > gettime(7) - 2000)
goto L_End3;
set #EASTERTIMEPENALTY, gettimetick(2);
- // global counter to determine reshuffle times of the eggs.
- set $@peopleFoundEggs[@EasterEggID], $@peopleFoundEggs[@EasterEggID]+1;
-
- set @AnnualEasterTries, @AnnualEasterTries + 1;
+ set .found, .found + 1; // this egg has been found X times
+ set @AnnualEasterTries, @AnnualEasterTries + 1; // you tried X times since login
- // give a small reward:
- message strcharinfo(0), "You found something!";
- set @tmp, getarraysize($@SmallAnnualEasterItems$);
- set @random, rand(@tmp + 2);
- if (@random < @tmp) getitem $@SmallAnnualEasterItems$[@random], rand(1, 2);
- if (@random == @tmp) getexp rand(200), 0;
- if (@random == @tmp + 1) set Zeny, Zeny + rand(50);
- misceffect FX_GETITEM, strcharinfo(0);
+ message strcharinfo(0), "Eggs : You found something!";
+ set .@size, get(.small_rewards, "Easter Eggs");
+ set .@random, rand(.@size+2);
+ if (.@random < .@size)
+ getitem get(.small_rewards$[.@random], "Easter Eggs"), rand(1, 2);
+ elif (.@random == .@size)
+ getexp rand(200), 0;
+ else
+ set Zeny, Zeny + rand(50);
- // give out a better reward occasionally:
- // standard case is branch taken, so only if rand yields 0, medium rewarding.
- if (rand($@EASTER_EGG_INV_CHANCE))
+ if (rand(get(.chance, "Easter Eggs")))
goto L_NoEasterEgg;
- set @random, rand(getarraysize($@MediumAnnualEasterRewards$));
- getitem $@MediumAnnualEasterRewards$[@random], 1;
+
+ set .@random, rand(get(.medium_rewards$, "Easter Eggs"));
+ getitem get(.medium_rewards$[.@random], "Easter Eggs"), 1;
misceffect FX_GETITEM, strcharinfo(0);
goto L_NoEasterEgg;
L_NoEasterEgg:
-
- // If you're lucky you get a bigger unique reward per year:
- // so only pass on a small chance iff you don't have the item yet.
- // Usually the journey ends here because @random != 0 -> end
- callsub S_Read_Annual_Quest;
-
- if (@AnnualEasterTries > $@EASTER_FINAL_REW_INV_CHANCE)
- set @AnnualEasterTries, $@EASTER_FINAL_REW_INV_CHANCE;
- set @random, rand($@EASTER_FINAL_REW_INV_CHANCE - @AnnualEasterTries + 1);
- if (@random || @easter_year > gettime(7) - 2000)
- goto L_End1;
+ set .@fchance, get(.final_rew_chance, "Easter Eggs");
+ if (@AnnualEasterTries > .@fchance)
+ set @AnnualEasterTries, .@fchance;
+ set .@random, rand(.@fchance - @AnnualEasterTries + 1);
+ if (.@random || @easter_year > gettime(7) - 2000)
+ goto L_Reward_End;
// block for further items this year:
set @easter_year, gettime(7) - 2000 + 1;
- callsub S_Update_Annual_Quest;
+ set Annual_Quest, (Annual_Quest & ~(BYTE_1_MASK) | (@easter_year << BYTE_1_SHIFT));
// Hand out pretty unique rewards depending on the current year:
// We'll be handing out 2 different items each year, whereas one of them
// will be very common (95 %) and the other rare (5 %) for the players.
// The rare item will become the common item next year.
- set @rewardindex, gettime(7) - 2012;
+ set .@rewardindex, gettime(7) - 2012;
if (rand(100) < 5)
- set @rewardindex, @rewardindex + 1;
-
+ set .@rewardindex, .@rewardindex + 1;
// now hand out the specific item:
- set @rewardindex, @rewardindex % getarraysize($@FinalAnnualEasterReward$);
- getitem $@FinalAnnualEasterReward$[@rewardindex], 1;
+ set .@rewardindex, .@rewardindex % get(.big_rewards, "Easter Eggs");
+ getitem get(.big_rewards$[.@rewardindex], "Easter Eggs"), 1;
misceffect FX_GETITEM, strcharinfo(0);
- message strcharinfo(0), "This is really special. You won't find anything like this again.";
- goto L_End1;
+ message strcharinfo(0), "Eggs : This is really special. You won't find anything like this again.";
+ goto L_Reward_End;
-S_Read_Annual_Quest:
- set @easter_year, (Annual_Quest & BYTE_1_MASK) >> BYTE_1_SHIFT;
- return;
+L_Reward_End:
+ if (.found >= get(.mapcount, "Easter Eggs"))
+ goto L_Destroy;
+ end;
-S_Update_Annual_Quest:
- set Annual_Quest, (Annual_Quest & ~(BYTE_1_MASK) | (@easter_year << BYTE_1_SHIFT));
- return;
+L_Destroy:
+ set .eggs, get(.eggs, "Easter Eggs") - 1, "Easter Eggs"; // tell the puppeteer we lost an egg
+ destroy;
L_EndTooYoung:
- message strcharinfo(0), "The nest is empty.";
- goto L_End1;
+ message strcharinfo(0), "Eggs : The nest is empty.";
+ end;
L_WarmUp:
set #EASTERTIMEPENALTY, gettimetick(2);
getitem "MoubooFigurine", 1;
misceffect FX_GETITEM, strcharinfo(0);
- message strcharinfo(0), "Hmmm eggs! Maybe you can find something nice there!";
- goto L_End1;
+ message strcharinfo(0), "Eggs : Hmmm eggs! Maybe you can find something nice there!";
+ end;
L_End3:
- message strcharinfo(0), "Don't be greedy! You already found something nice.";
- goto L_End1;
+ message strcharinfo(0), "Eggs : Don't be greedy! You already found something nice.";
+ end;
L_End2:
- message strcharinfo(0), "Don't be greedy! You just found something a moment ago.";
+ message strcharinfo(0), "Eggs : Don't be greedy! You just found something a moment ago.";
set #EASTERTIMEPENALTY, #EASTERTIMEPENALTY + 5;
if (#EASTERTIMEPENALTY > gettimetick(2))
set #EASTERTIMEPENALTY, gettimetick(2);
- goto L_End1;
-
-L_End1:
- set @rewardindex, 0;
- set @easter_year, 0;
- set @random, 0;
- set @tmp, 0;
- set @EasterEggID, 0;
- return;
-}
-
-008-1,65,40,0|script|#TestEgg0|375
-{
- set @npc_distance, 1;
- callfunc "PCtoNPCRange";
- if(@npc_check) end;
-
- set @EasterEggID, 0;
- callfunc("AnnualEasterEvent");
end;
-}
-008-1,65,40,0|script|#TestEgg1|375
-{
- set @npc_distance, 1;
- callfunc "PCtoNPCRange";
- if(@npc_check) end;
-
- set @EasterEggID, 1;
- callfunc("AnnualEasterEvent");
+OnTimer5000:
+ if (get(.disabled, "Easter Eggs") || $@isEaster < 1)
+ goto L_Destroy;
+ initnpctimer;
end;
-}
-008-1,65,40,0|script|#TestEgg2|375
-{
- set @npc_distance, 1;
- callfunc "PCtoNPCRange";
- if(@npc_check) end;
-
- set @EasterEggID, 2;
- callfunc("AnnualEasterEvent");
- end;
-}
+//////////////////////////////////
+// puppeteer logic below
-008-1,59,38,0|script|#AnnualEaster|32767
-{
+OnSpawn:
+ set .@e, rand(2,.loc[1]);
+ set .@x, .loc[.@e];
+ set .@y, .loc[(.@e-1)+.loc[1]];
+ set .eID, .eID + 1; // give the egg an id
+ set .@name$, "#--Ee"+chr(3)+.eID;
+ void puppet(strnpcinfo(3), .@x, .@y, .@name$, 375); // spawn the egg
+ initnpctimer .@name$; // init puppeteer check timer
+ if (.eID == 2147483647)
+ set .eID, 0; // start over if id = 0x7FFFFFFF
end;
-OnInit:
- set $@EASTER_FOUND_WAIT_TIME, 15;
- set $@EASTER_FINAL_REW_INV_CHANCE, 70;
- set $@EASTER_EGG_INV_CHANCE, 750;
-
- setarray $@easteregg_posx, 41, 45, 50, 57, 60, 64, 67, 65, 59, 72, 70, 82, 81, 93, 97, 101, 88, 108, 115, 122, 122, 129, 129, 130, 135, 123, 132, 132, 127, 124, 121, 107, 100, 101, 109, 104, 88, 84, 92, 59, 71, 65, 53, 55, 74, 59, 53, 46, 44, 44, 38, 43, 40, 43, 37;
- setarray $@easteregg_posy, 87, 89, 88, 93, 98, 90, 96, 82, 81, 82, 96, 98, 92, 89, 89, 81, 82, 94, 96, 96, 90, 86, 72, 65, 60, 46, 25, 21, 20, 22, 20, 34, 24, 41, 43, 42, 48, 28, 27, 17, 23, 29, 25, 20, 39, 41, 34, 36, 18, 25, 31, 39, 64, 69, 73;
-
- if (getarraysize($@easteregg_posy) != getarraysize($@easteregg_posx))
- goto L_FAULTY_SETUP;
-
- setarray $@SmallAnnualEasterItems$, "AppleCake", "CactusDrink", "CactusPotion", "Cake", "Candy", "CherryCake", "ChocolateBar", "ChocolateCake", "GreenApple", "Orange", "OrangeCake", "OrangeCupcake", "RedApple", "WhiteCake";
-
- setarray $@MediumAnnualEasterRewards$, "RedEasterEgg", "GreenEasterEgg", "BlueEasterEgg", "YellowEasterEgg", "PinkEasterEgg", "TealEasterEgg";
+S_Spawn:
+ if (.eggs >= .max_eggs)
+ goto S_Return;
+ set .eggs, .eggs + 1;
+ addnpctimer 125 + rand(250), strnpcinfo(0) + "::OnSpawn"; // schedule a spawn
+ if (.eggs < .min_eggs)
+ goto S_Spawn;
+ return;
- // DO NOT CHANGE SIZE AFTER EASTER 2013!
- setarray $@FinalAnnualEasterReward$, "RedEggshellHat", "BlueEggshellHat", "YellowEggshellHat", "GreenEggshellHat", "OrangeEggshellHat", "DarkEggshellHat";
+S_Return:
+ return;
- callsub S_disableEggs;
- if (debug >= 2) end;
- initnpctimer;
+OnHeartbeat:
+ if (.max_eggs < 1 || .disabled || $@isEaster < 1) end;
+ set .mapcount, 1 + getmapusers(strnpcinfo(3)) / 3;
+ callsub S_Spawn;
+ addnpctimer 1000, strnpcinfo(0) + "::OnHeartbeat"; // heartbeat
end;
-L_FAULTY_SETUP:
- mapexit;
-
-OnTimer1000:
- setnpctimer 0;
-
- // an egg can be 'found' multiple times, make this number of possible findings
- // depend on the number of players currently on the map.
- set $@AEASTER_mapcount, 1 + getmapusers("008-1") / 3;
-
- set $@isEaster, 0;
+OnCheckEaster:
if ((gettime(6) == 3 && gettime(5) >= 22) || (gettime(6) == 4 && gettime(5) <= 25))
set $@isEaster, 1;
-
- if (!$@wasEaster && $@isEaster)
- goto L_do_update_enable;
- if ($@wasEaster && !$@isEaster)
- goto L_do_update_disable;
- goto L_done_update;
-
-L_do_update_enable:
- callsub S_enableEggs;
- goto L_done_update;
-
-L_do_update_disable:
- callsub S_disableEggs;
- goto L_done_update;
-
-L_done_update:
- set $@wasEaster, $@isEaster;
-
- if (!$@isEaster)
- goto L_End;
-
- set $@EggID, 0;
- callsub S_relocateEasterEgg;
- set $@EggID, 1;
- callsub S_relocateEasterEgg;
- set $@EggID, 2;
- callsub S_relocateEasterEgg;
- // intentional fallthrough to L_End
- goto L_End;
-
-L_End:
- set $@AEASTER_mapcount, 0;
- set $@EggID, 0;
- set $@isEaster, 0;
+ else
+ set $@isEaster, 0;
+ if ($@isEaster && .eggs < 1)
+ donpcevent "Easter Eggs::OnStart";
end;
-S_enableEggs:
- enablenpc "#TestEgg0";
- enablenpc "#TestEgg1";
- enablenpc "#TestEgg2";
- return;
-
-S_disableEggs:
- disablenpc "#TestEgg0";
- disablenpc "#TestEgg1";
- disablenpc "#TestEgg2";
- return;
-
-S_relocateEasterEgg:
- if ($@peopleFoundEggs[$@EggID] < $@AEASTER_mapcount)
- goto S_Return;
-
- set $@peopleFoundEggs[$@EggID], 0;
-
- set $@eastereggPos, rand(getarraysize($@easteregg_posx));
- npcwarp $@easteregg_posx[$@eastereggPos], $@easteregg_posy[$@eastereggPos], "#TestEgg" + $@EggID;
- goto S_Return;
+OnStart:
+ if (.disabled || $@isEaster < 1) end;
+ set .min_eggs, 1; // min number of eggs
+ set .max_eggs, 3; // max number of eggs
+ set .eggs, 0; // virtual amount of eggs
+ set .eID, 0; // last egg id
+ set .wait_time, 15;
+ set .final_rew_chance, 70;
+ set .chance, 750;
+ setarray .loc[0], 0, 1,1, // first row: x, second row: y
+ 41, 45, 50, 57, 60, 64, 67, 65, 59, 72, 70, 82, 81, 93, 97, 101, 88, 108, 115, 122, 122, 129, 129, 130, 135, 123, 132, 132, 127, 124, 121, 107, 100, 101, 109, 104, 88, 84, 92, 59, 71, 65, 53, 55, 74, 59, 53, 46, 44, 44, 38, 43, 40, 43, 37,
+ 87, 89, 88, 93, 98, 90, 96, 82, 81, 82, 96, 98, 92, 89, 89, 81, 82, 94, 96, 96, 90, 86, 72, 65, 60, 46, 25, 21, 20, 22, 20, 34, 24, 41, 43, 42, 48, 28, 27, 17, 23, 29, 25, 20, 39, 41, 34, 36, 18, 25, 31, 39, 64, 69, 73;
+ set .loc[0], (getarraysize(.loc) - 1); // loc 0 and 1 are special (stores array size, and half index)
+ set .loc[1], ((.loc[0]+1)/2);
+ setarray .small_rewards$[0], 0, "AppleCake", "CactusDrink", "CactusPotion", "Cake", "Candy", "CherryCake", "ChocolateBar", "ChocolateCake", "GreenApple", "Orange", "OrangeCake", "OrangeCupcake", "RedApple", "WhiteCake";
+ set .small_rewards, getarraysize(.small_rewards$);
+ setarray .medium_rewards$[0], 0, "RedEasterEgg", "GreenEasterEgg", "BlueEasterEgg", "YellowEasterEgg", "PinkEasterEgg", "TealEasterEgg";
+ setarray .big_rewards$[0], 0, "RedEggshellHat", "BlueEggshellHat", "YellowEggshellHat", "GreenEggshellHat", "OrangeEggshellHat", "DarkEggshellHat";
+ set .big_rewards, getarraysize(.big_rewards$);
+ donpcevent strnpcinfo(0) + "::OnHeartbeat"; // first heartbeat
+ end;
+}
-S_Return:
+function|script|Easter Debug
+{
+ goto L_Menu;
+
+L_Menu:
+ clear;
+ mes "Please choose an option.";
+ if (get(.disabled, "Easter Eggs"))
+ menu
+ "Do Nothing.", L_Return,
+ "Enable eggs.", L_Enable;
+ menu
+ "Do Nothing.", L_Return,
+ "Disable eggs.", L_Disable;
+
+L_Enable:
+ set .disabled, 0, "Easter Eggs";
+ clear;
+ mes "Easter Eggs enabled.";
+ next;
+ goto L_Menu;
+
+L_Disable:
+ set .disabled, 1, "Easter Eggs"; // TODO: (tmwa) automatically destroy puppets when using @disablenpc & also discard timers
+ clear;
+ mes "Easter Eggs disabled.";
+ next;
+ goto L_Menu;
+
+L_Return:
return;
}
diff --git a/world/map/npc/008-1/hinnak.txt b/world/map/npc/008-1/hinnak.txt
index c2360141..d16460c3 100644
--- a/world/map/npc/008-1/hinnak.txt
+++ b/world/map/npc/008-1/hinnak.txt
@@ -217,7 +217,7 @@ L_Sagatha_scary:
L_Sagatha_word:
mes "[Farmer Hinnak]";
- mes "\"Oh, I can't be sure... but something like '" + getspellinvocation("summon-maggots") + "', I think.\"";
+ mes "\"Oh, I can't be sure... but something like '" + get(.invocation$, "summon-maggots") + "', I think.\"";
goto L_Close;
L_NoBeer:
diff --git a/world/map/npc/009-1/_import.txt b/world/map/npc/009-1/_import.txt
index 4c902627..6c27b6c5 100644
--- a/world/map/npc/009-1/_import.txt
+++ b/world/map/npc/009-1/_import.txt
@@ -2,6 +2,7 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 009-1
npc: npc/009-1/_mobs.txt
+npc: npc/009-1/_nodes.txt
npc: npc/009-1/_warps.txt
npc: npc/009-1/constable.txt
npc: npc/009-1/dock.txt
diff --git a/world/map/npc/009-1/_mobs.txt b/world/map/npc/009-1/_mobs.txt
index 247a3797..223569bf 100644
--- a/world/map/npc/009-1/_mobs.txt
+++ b/world/map/npc/009-1/_mobs.txt
@@ -1,34 +1,8 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Hurnscald mobs
-009-1,74,32,2,1|monster|CloverPatch|1037,1,100000ms,120000ms,Mob009-1::On1037
-009-1,29,44,9,13|monster|PinkFlower|1014,2,0ms,250ms,Mob009-1::On1014
-009-1,88,51,15,4|monster|Squirrel|1038,2,0ms,5000ms,Mob009-1::On1038
-009-1,80,38,5,5|monster|Squirrel|1038,1,0ms,5000ms,Mob009-1::On1038
-009-1,0,0,0,0|monster|Butterfly|1055,5,30ms,20ms,Mob009-1::On1055
-
-
-009-1,0,0,0|script|Mob009-1|32767
-{
- end;
-
-On1014:
- set @mobID, 1014;
- callfunc "MobPoints";
- end;
-
-On1037:
- set @mobID, 1037;
- callfunc "MobPoints";
- end;
-
-On1038:
- set @mobID, 1038;
- callfunc "MobPoints";
- end;
-
-On1055:
- set @mobID, 1055;
- callfunc "MobPoints";
- end;
-}
+009-1,74,32,2,1|monster|CloverPatch|1037,1,100000ms,120000ms
+009-1,29,44,9,13|monster|PinkFlower|1014,2,0ms,250ms
+009-1,88,51,15,4|monster|Squirrel|1038,2,0ms,5000ms
+009-1,80,38,5,5|monster|Squirrel|1038,1,0ms,5000ms
+009-1,0,0,0,0|monster|Butterfly|1055,5,30ms,20ms
diff --git a/world/map/npc/009-1/_nodes.txt b/world/map/npc/009-1/_nodes.txt
new file mode 100644
index 00000000..6d59c8db
--- /dev/null
+++ b/world/map/npc/009-1/_nodes.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Hurnscald nodes
+
+// (no nodes)
diff --git a/world/map/npc/009-2/_import.txt b/world/map/npc/009-2/_import.txt
index 2bec98b3..25198d72 100644
--- a/world/map/npc/009-2/_import.txt
+++ b/world/map/npc/009-2/_import.txt
@@ -2,6 +2,7 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 009-2
npc: npc/009-2/_mobs.txt
+npc: npc/009-2/_nodes.txt
npc: npc/009-2/_warps.txt
npc: npc/009-2/airlia.txt
npc: npc/009-2/alan.txt
diff --git a/world/map/npc/009-2/_mobs.txt b/world/map/npc/009-2/_mobs.txt
index e0b8a1a0..45fa02a8 100644
--- a/world/map/npc/009-2/_mobs.txt
+++ b/world/map/npc/009-2/_mobs.txt
@@ -1,9 +1,3 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Hurnscald Indoor mobs
-
-
-009-2,0,0,0|script|Mob009-2|32767
-{
- end;
-}
diff --git a/world/map/npc/009-2/_nodes.txt b/world/map/npc/009-2/_nodes.txt
new file mode 100644
index 00000000..161b9c17
--- /dev/null
+++ b/world/map/npc/009-2/_nodes.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Hurnscald Indoor nodes
+
+// (no nodes)
diff --git a/world/map/npc/009-2/misc.txt b/world/map/npc/009-2/misc.txt
index b28d43b5..1c1d3897 100644
--- a/world/map/npc/009-2/misc.txt
+++ b/world/map/npc/009-2/misc.txt
@@ -39,7 +39,7 @@ L_magic:
mes "The page after that is once again hastily written, with many crossed out words and sections and side remarks such as 'it almost worked' or 'it worked fine yesterday.'";
next;
mes "[Bookshelf]";
- mes "The last word on that page is '" + getspellinvocation("make-iron-powder") + ",' and it's underlined twice with a comment next to it saying 'finally got it right.'";
+ mes "The last word on that page is '" + get(.invocation$, "make-iron-powder") + ",' and it's underlined twice with a comment next to it saying 'finally got it right.'";
next;
mes "[Bookshelf]";
mes "Unfortunately, you can't make out what the transmutation is for or even whether it requires any materials...";
diff --git a/world/map/npc/009-2/wyara.txt b/world/map/npc/009-2/wyara.txt
index ba33d29f..246d458a 100644
--- a/world/map/npc/009-2/wyara.txt
+++ b/world/map/npc/009-2/wyara.txt
@@ -242,7 +242,7 @@ L_M_spell:
L_M_spell3:
mes "[Wyara the Witch]";
- mes "\"Now that you know the basics of nature magic, here is one of my favourites: '" + getspellinvocation("rain") + "' will summon rain, whereever you are standing. It will consume a bottle of water, though.\"";
+ mes "\"Now that you know the basics of nature magic, here is one of my favourites: '" + get(.invocation$, "rain") + "' will summon rain, whereever you are standing. It will consume a bottle of water, though.\"";
if (getskilllv(SKILL_MAGIC) < 2)
mes "\"You are not powerful enough to use it yet, though; you will first have to absorb more magic from the mana seed.\"";
next;
@@ -250,14 +250,14 @@ L_M_spell3:
L_M_spell2:
mes "[Wyara the Witch]";
- mes "\"Here is another useful one: '" + getspellinvocation("detect-players") + "'. It will tell you the names of everyone nearby, but beware that there are ways to protect against it.\"";
+ mes "\"Here is another useful one: '" + get(.invocation$, "detect-players") + "'. It will tell you the names of everyone nearby, but beware that there are ways to protect against it.\"";
if (getskilllv(SKILL_MAGIC) < 2)
mes "\"Hmm. You aren't powerful enough for this one either yet, I think.\"";
next;
if (!(getpartnerid2()))
goto L_M_main;
mes "[Wyara the Witch]";
- mes "\"Married partners can find each other even more easily. Use the '" + getspellinvocation("sense-spouse") + "' spell instead.\"";
+ mes "\"Married partners can find each other even more easily. Use the '" + get(.invocation$, "sense-spouse") + "' spell instead.\"";
next;
goto L_M_main;
diff --git a/world/map/npc/009-3/_import.txt b/world/map/npc/009-3/_import.txt
index f147aa76..6cf14773 100644
--- a/world/map/npc/009-3/_import.txt
+++ b/world/map/npc/009-3/_import.txt
@@ -2,6 +2,7 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 009-3
npc: npc/009-3/_mobs.txt
+npc: npc/009-3/_nodes.txt
npc: npc/009-3/_warps.txt
npc: npc/009-3/mapflags.txt
npc: npc/009-3/sword.txt
diff --git a/world/map/npc/009-3/_mobs.txt b/world/map/npc/009-3/_mobs.txt
index ab403a12..64c43145 100644
--- a/world/map/npc/009-3/_mobs.txt
+++ b/world/map/npc/009-3/_mobs.txt
@@ -1,33 +1,7 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Hurnscald Cave mobs
-009-3,0,0,0,0|monster|YellowSlime|1007,20,0ms,0ms,Mob009-3::On1007
-009-3,62,75,125,150|monster|BlackScorpion|1009,25,0ms,0ms,Mob009-3::On1009
-009-3,63,75,126,150|monster|RedSlime|1008,35,0ms,0ms,Mob009-3::On1008
-009-3,145,75,110,151|monster|CaveMaggot|1056,20,100000ms,30000ms,Mob009-3::On1056
-
-
-009-3,0,0,0|script|Mob009-3|32767
-{
- end;
-
-On1007:
- set @mobID, 1007;
- callfunc "MobPoints";
- end;
-
-On1008:
- set @mobID, 1008;
- callfunc "MobPoints";
- end;
-
-On1009:
- set @mobID, 1009;
- callfunc "MobPoints";
- end;
-
-On1056:
- set @mobID, 1056;
- callfunc "MobPoints";
- end;
-}
+009-3,0,0,0,0|monster|YellowSlime|1007,20,0ms,0ms
+009-3,62,75,125,150|monster|BlackScorpion|1009,25,0ms,0ms
+009-3,63,75,126,150|monster|RedSlime|1008,35,0ms,0ms
+009-3,145,75,110,151|monster|CaveMaggot|1056,20,100000ms,30000ms
diff --git a/world/map/npc/009-3/_nodes.txt b/world/map/npc/009-3/_nodes.txt
new file mode 100644
index 00000000..a4b17b18
--- /dev/null
+++ b/world/map/npc/009-3/_nodes.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Hurnscald Cave nodes
+
+// (no nodes)
diff --git a/world/map/npc/009-3/sword.txt b/world/map/npc/009-3/sword.txt
index 91366f9e..1a427731 100644
--- a/world/map/npc/009-3/sword.txt
+++ b/world/map/npc/009-3/sword.txt
@@ -103,7 +103,7 @@ L_Next1:
mes "\"So thou art bound to the path of War, as am I, as is my sister...\"";
next;
mes "[Magic Sword]";
- mes "\"So be it, fellow warrior. Hear the incantation for the blade spell: '" + getspellinvocation("magic-blade") + "'\"";
+ mes "\"So be it, fellow warrior. Hear the incantation for the blade spell: '" + get(.invocation$, "magic-blade") + "'\"";
mes "\"Hold a knife, sharp or regular, when thou speakest it.\"";
set @Q_status, @STATUS_LEARNED_MAGICBLADE;
callsub S_update_var;
@@ -152,7 +152,7 @@ L_Next3:
mes "\"The spell I shall teach thee is the hail of arrows spell. It will make arrows fall down from the heavens unto thy enemies.\"";
next;
mes "[Magic Sword]";
- mes "\"Take twenty arrows, sprinkle sulphur powder over them, and then speak '" + getspellinvocation("arrow-hail") + "'. Throw them high up in the air, and watch the hail unfold before thy feet.\"";
+ mes "\"Take twenty arrows, sprinkle sulphur powder over them, and then speak '" + get(.invocation$, "arrow-hail") + "'. Throw them high up in the air, and watch the hail unfold before thy feet.\"";
close;
L_L2_almost_done:
diff --git a/world/map/npc/009-4/_import.txt b/world/map/npc/009-4/_import.txt
index c10d7df3..efddeeb4 100644
--- a/world/map/npc/009-4/_import.txt
+++ b/world/map/npc/009-4/_import.txt
@@ -2,6 +2,7 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 009-4
npc: npc/009-4/_mobs.txt
+npc: npc/009-4/_nodes.txt
npc: npc/009-4/_warps.txt
npc: npc/009-4/barriers.txt
npc: npc/009-4/mapflags.txt
diff --git a/world/map/npc/009-4/_mobs.txt b/world/map/npc/009-4/_mobs.txt
index e81f350e..2995d15e 100644
--- a/world/map/npc/009-4/_mobs.txt
+++ b/world/map/npc/009-4/_mobs.txt
@@ -1,31 +1,10 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Orum Caves mobs
-009-4,117,97,24,15|monster|Silkworm|1035,3,20000ms,14000ms,Mob009-4::On1035
-009-4,115,98,24,15|monster|CaveSnake|1021,5,20000ms,14000ms,Mob009-4::On1021
-009-4,103,28,24,15|monster|CaveSnake|1021,3,20000ms,14000ms,Mob009-4::On1021
-009-4,106,27,24,15|monster|Silkworm|1035,3,20000ms,14000ms,Mob009-4::On1035
-009-4,119,45,12,10|monster|Silkworm|1035,3,20000ms,14000ms,Mob009-4::On1035
-009-4,72,130,24,15|monster|Maggot|1002,3,20000ms,14000ms,Mob009-4::On1002
-009-4,38,116,24,15|monster|Maggot|1002,3,20000ms,14000ms,Mob009-4::On1002
-
-
-009-4,0,0,0|script|Mob009-4|32767
-{
- end;
-
-On1002:
- set @mobID, 1002;
- callfunc "MobPoints";
- end;
-
-On1021:
- set @mobID, 1021;
- callfunc "MobPoints";
- end;
-
-On1035:
- set @mobID, 1035;
- callfunc "MobPoints";
- end;
-}
+009-4,117,97,24,15|monster|Silkworm|1035,3,20000ms,14000ms
+009-4,115,98,24,15|monster|CaveSnake|1021,5,20000ms,14000ms
+009-4,103,28,24,15|monster|CaveSnake|1021,3,20000ms,14000ms
+009-4,106,27,24,15|monster|Silkworm|1035,3,20000ms,14000ms
+009-4,119,45,12,10|monster|Silkworm|1035,3,20000ms,14000ms
+009-4,72,130,24,15|monster|Maggot|1002,3,20000ms,14000ms
+009-4,38,116,24,15|monster|Maggot|1002,3,20000ms,14000ms
diff --git a/world/map/npc/009-4/_nodes.txt b/world/map/npc/009-4/_nodes.txt
new file mode 100644
index 00000000..5050be70
--- /dev/null
+++ b/world/map/npc/009-4/_nodes.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Orum Caves nodes
+
+// (no nodes)
diff --git a/world/map/npc/009-5/_import.txt b/world/map/npc/009-5/_import.txt
index 6cbfcc60..fe3f3fff 100644
--- a/world/map/npc/009-5/_import.txt
+++ b/world/map/npc/009-5/_import.txt
@@ -2,5 +2,6 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 009-5
npc: npc/009-5/_mobs.txt
+npc: npc/009-5/_nodes.txt
npc: npc/009-5/_warps.txt
npc: npc/009-5/mapflags.txt
diff --git a/world/map/npc/009-5/_mobs.txt b/world/map/npc/009-5/_mobs.txt
index 78d520be..7e4d996a 100644
--- a/world/map/npc/009-5/_mobs.txt
+++ b/world/map/npc/009-5/_mobs.txt
@@ -1,9 +1,3 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Last man standing mobs
-
-
-009-5,0,0,0|script|Mob009-5|32767
-{
- end;
-}
diff --git a/world/map/npc/009-5/_nodes.txt b/world/map/npc/009-5/_nodes.txt
new file mode 100644
index 00000000..9f0d888e
--- /dev/null
+++ b/world/map/npc/009-5/_nodes.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Last man standing nodes
+
+// (no nodes)
diff --git a/world/map/npc/009-6/_import.txt b/world/map/npc/009-6/_import.txt
index 11296b22..3bb23125 100644
--- a/world/map/npc/009-6/_import.txt
+++ b/world/map/npc/009-6/_import.txt
@@ -2,6 +2,7 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 009-6
npc: npc/009-6/_mobs.txt
+npc: npc/009-6/_nodes.txt
npc: npc/009-6/_warps.txt
npc: npc/009-6/brodomir.txt
npc: npc/009-6/mapflags.txt
diff --git a/world/map/npc/009-6/_mobs.txt b/world/map/npc/009-6/_mobs.txt
index adb1e44e..c03fd729 100644
--- a/world/map/npc/009-6/_mobs.txt
+++ b/world/map/npc/009-6/_mobs.txt
@@ -1,9 +1,3 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Cave mobs
-
-
-009-6,0,0,0|script|Mob009-6|32767
-{
- end;
-}
diff --git a/world/map/npc/009-6/_nodes.txt b/world/map/npc/009-6/_nodes.txt
new file mode 100644
index 00000000..ed02d5dc
--- /dev/null
+++ b/world/map/npc/009-6/_nodes.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Cave nodes
+
+// (no nodes)
diff --git a/world/map/npc/009-6/brodomir.txt b/world/map/npc/009-6/brodomir.txt
index 02704447..ea73ac36 100644
--- a/world/map/npc/009-6/brodomir.txt
+++ b/world/map/npc/009-6/brodomir.txt
@@ -195,7 +195,7 @@ L_SkipItemback:
L_Check:
if (getareausers("009-5", 20, 20, 80, 80, 1) > 1)
end;
- areatimer "009-5", 20, 20, 80, 80, 0, "Brodomir::OnReward";
+ areatimer 0, "009-5", 20, 20, 80, 80, 0, "Brodomir::OnReward";
goto L_End;
OnReward:
diff --git a/world/map/npc/009-7/_import.txt b/world/map/npc/009-7/_import.txt
index 4ae626ea..a064a519 100644
--- a/world/map/npc/009-7/_import.txt
+++ b/world/map/npc/009-7/_import.txt
@@ -2,6 +2,7 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 009-7
npc: npc/009-7/_mobs.txt
+npc: npc/009-7/_nodes.txt
npc: npc/009-7/_warps.txt
npc: npc/009-7/battlemaster.txt
npc: npc/009-7/core.txt
diff --git a/world/map/npc/009-7/_mobs.txt b/world/map/npc/009-7/_mobs.txt
index bb641d0c..5eb4c228 100644
--- a/world/map/npc/009-7/_mobs.txt
+++ b/world/map/npc/009-7/_mobs.txt
@@ -1,9 +1,3 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// The Sanguine Vault mobs
-
-
-009-7,0,0,0|script|Mob009-7|32767
-{
- end;
-}
diff --git a/world/map/npc/009-7/_nodes.txt b/world/map/npc/009-7/_nodes.txt
new file mode 100644
index 00000000..ad714a60
--- /dev/null
+++ b/world/map/npc/009-7/_nodes.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// The Sanguine Vault nodes
+
+// (no nodes)
diff --git a/world/map/npc/009-7/eventHandler.txt b/world/map/npc/009-7/eventHandler.txt
index d20fff4d..6f6419ca 100644
--- a/world/map/npc/009-7/eventHandler.txt
+++ b/world/map/npc/009-7/eventHandler.txt
@@ -40,7 +40,7 @@ OnBecomeKiller:
end;
OnCommandIntrusion:
- areatimer "009-7", $@fightclub_x1, $@fightclub_y1, $@fightclub_x2, $@fightclub_y2, 0, "#FightClubUtils::OnIntrusion"; // we can not do this directly on #handler because it already have a timer
+ areatimer 0, "009-7", $@fightclub_x1, $@fightclub_y1, $@fightclub_x2, $@fightclub_y2, 0, "#FightClubUtils::OnIntrusion"; // we can not do this directly on #handler because it already have a timer
end;
}
diff --git a/world/map/npc/009-7/rouge.txt b/world/map/npc/009-7/rouge.txt
index 7660683e..b9b8e4cd 100644
--- a/world/map/npc/009-7/rouge.txt
+++ b/world/map/npc/009-7/rouge.txt
@@ -78,13 +78,13 @@ L_Challenge:
next;
mes "[Rouge]";
mes "To challenge a player to a duel, you need to write this command:";
- mes "%%E ##a"+ getspellinvocation("duel") +" (name)##0";
+ mes "%%E ##a"+ ("duel") +" (name)##0";
next;
mes "Your opponent will have to talk to me to accept or decline your offer.";
mes "The request will expire ##2"+ @time$ +"##0 after being sent.";
next;
mes "Keep in mind that you can ignore incoming duel requests with this command:";
- mes "%%E ##a"+ getspellinvocation("dueloff") +"##0";
+ mes "%%E ##a"+ ("dueloff") +"##0";
next;
mes "To un-ignore, simply write the same command again.";
goto L_End;
diff --git a/world/map/npc/010-1/_import.txt b/world/map/npc/010-1/_import.txt
index 2bbe3df8..170881fa 100644
--- a/world/map/npc/010-1/_import.txt
+++ b/world/map/npc/010-1/_import.txt
@@ -2,5 +2,6 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 010-1
npc: npc/010-1/_mobs.txt
+npc: npc/010-1/_nodes.txt
npc: npc/010-1/_warps.txt
npc: npc/010-1/mapflags.txt
diff --git a/world/map/npc/010-1/_mobs.txt b/world/map/npc/010-1/_mobs.txt
index d73c842f..cf0ebae5 100644
--- a/world/map/npc/010-1/_mobs.txt
+++ b/world/map/npc/010-1/_mobs.txt
@@ -1,82 +1,16 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Woodland mobs
-010-1,82,63,19,19|monster|Scorpion|1003,1,100000ms,30000ms,Mob010-1::On1003
-010-1,49,71,31,19|monster|SpikyMushroom|1019,1,100000ms,30000ms,Mob010-1::On1019
-010-1,0,0,0,0|monster|PinkFlower|1014,30,50ms,0ms,Mob010-1::On1014
-010-1,0,0,0,0|monster|Snail|1041,20,50ms,0ms,Mob010-1::On1041
-010-1,0,0,0,0|monster|SpikyMushroom|1019,45,50ms,0ms,Mob010-1::On1019
-010-1,0,0,0,0|monster|LogHead|1025,40,100ms,0ms,Mob010-1::On1025
-010-1,0,0,0,0|monster|Mouboo|1028,15,0ms,10ms,Mob010-1::On1028
-010-1,0,0,0,0|monster|MauvePlant|1029,3,270000ms,180000ms,Mob010-1::On1029
-010-1,0,0,0,0|monster|CobaltPlant|1030,1,2700000ms,1800000ms,Mob010-1::On1030
-010-1,0,0,0,0|monster|Silkworm|1035,2,60000ms,30000ms,Mob010-1::On1035
-010-1,0,0,0,0|monster|CloverPatch|1037,2,0ms,1000ms,Mob010-1::On1037
-010-1,0,0,0,0|monster|Squirrel|1038,25,30ms,20ms,Mob010-1::On1038
-010-1,0,0,0,0|monster|Butterfly|1055,10,30ms,20ms,Mob010-1::On1055
-
-
-010-1,0,0,0|script|Mob010-1|32767
-{
- end;
-
-On1003:
- set @mobID, 1003;
- callfunc "MobPoints";
- end;
-
-On1014:
- set @mobID, 1014;
- callfunc "MobPoints";
- end;
-
-On1019:
- set @mobID, 1019;
- callfunc "MobPoints";
- end;
-
-On1025:
- set @mobID, 1025;
- callfunc "MobPoints";
- end;
-
-On1028:
- set @mobID, 1028;
- callfunc "MobPoints";
- end;
-
-On1029:
- set @mobID, 1029;
- callfunc "MobPoints";
- end;
-
-On1030:
- set @mobID, 1030;
- callfunc "MobPoints";
- end;
-
-On1035:
- set @mobID, 1035;
- callfunc "MobPoints";
- end;
-
-On1037:
- set @mobID, 1037;
- callfunc "MobPoints";
- end;
-
-On1038:
- set @mobID, 1038;
- callfunc "MobPoints";
- end;
-
-On1041:
- set @mobID, 1041;
- callfunc "MobPoints";
- end;
-
-On1055:
- set @mobID, 1055;
- callfunc "MobPoints";
- end;
-}
+010-1,82,63,19,19|monster|Scorpion|1003,1,100000ms,30000ms
+010-1,49,71,31,19|monster|SpikyMushroom|1019,1,100000ms,30000ms
+010-1,0,0,0,0|monster|PinkFlower|1014,30,50ms,0ms
+010-1,0,0,0,0|monster|Snail|1041,20,50ms,0ms
+010-1,0,0,0,0|monster|SpikyMushroom|1019,45,50ms,0ms
+010-1,0,0,0,0|monster|LogHead|1025,40,100ms,0ms
+010-1,0,0,0,0|monster|Mouboo|1028,15,0ms,10ms
+010-1,0,0,0,0|monster|MauvePlant|1029,3,270000ms,180000ms
+010-1,0,0,0,0|monster|CobaltPlant|1030,1,2700000ms,1800000ms
+010-1,0,0,0,0|monster|Silkworm|1035,2,60000ms,30000ms
+010-1,0,0,0,0|monster|CloverPatch|1037,2,0ms,1000ms
+010-1,0,0,0,0|monster|Squirrel|1038,25,30ms,20ms
+010-1,0,0,0,0|monster|Butterfly|1055,10,30ms,20ms
diff --git a/world/map/npc/010-1/_nodes.txt b/world/map/npc/010-1/_nodes.txt
new file mode 100644
index 00000000..12c08221
--- /dev/null
+++ b/world/map/npc/010-1/_nodes.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Woodland nodes
+
+// (no nodes)
diff --git a/world/map/npc/010-2/_import.txt b/world/map/npc/010-2/_import.txt
index 9c2b3065..7d790a1b 100644
--- a/world/map/npc/010-2/_import.txt
+++ b/world/map/npc/010-2/_import.txt
@@ -2,6 +2,7 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 010-2
npc: npc/010-2/_mobs.txt
+npc: npc/010-2/_nodes.txt
npc: npc/010-2/_warps.txt
npc: npc/010-2/band.txt
npc: npc/010-2/chef.txt
diff --git a/world/map/npc/010-2/_mobs.txt b/world/map/npc/010-2/_mobs.txt
index 3b258bd5..5ae78616 100644
--- a/world/map/npc/010-2/_mobs.txt
+++ b/world/map/npc/010-2/_mobs.txt
@@ -1,9 +1,3 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Dimond's Cove mobs
-
-
-010-2,0,0,0|script|Mob010-2|32767
-{
- end;
-}
diff --git a/world/map/npc/010-2/_nodes.txt b/world/map/npc/010-2/_nodes.txt
new file mode 100644
index 00000000..97d1478f
--- /dev/null
+++ b/world/map/npc/010-2/_nodes.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Dimond's Cove nodes
+
+// (no nodes)
diff --git a/world/map/npc/011-1/_import.txt b/world/map/npc/011-1/_import.txt
index 13faf23a..161caeb4 100644
--- a/world/map/npc/011-1/_import.txt
+++ b/world/map/npc/011-1/_import.txt
@@ -2,6 +2,7 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 011-1
npc: npc/011-1/_mobs.txt
+npc: npc/011-1/_nodes.txt
npc: npc/011-1/_warps.txt
npc: npc/011-1/alchemist.txt
npc: npc/011-1/auldsbel.txt
diff --git a/world/map/npc/011-1/_mobs.txt b/world/map/npc/011-1/_mobs.txt
index 3a0c0ce3..596c7194 100644
--- a/world/map/npc/011-1/_mobs.txt
+++ b/world/map/npc/011-1/_mobs.txt
@@ -1,88 +1,17 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Woodland mobs
-011-1,0,0,0,0|monster|EvilMushroom|1013,30,0ms,0ms,Mob011-1::On1013
-011-1,0,0,0,0|monster|PinkFlower|1014,20,0ms,0ms,Mob011-1::On1014
-011-1,0,0,0,0|monster|SpikyMushroom|1019,5,0ms,0ms,Mob011-1::On1019
-011-1,0,0,0,0|monster|Snail|1041,1,0ms,0ms,Mob011-1::On1041
-011-1,0,0,0,0|monster|Mouboo|1028,5,0ms,10ms,Mob011-1::On1028
-011-1,0,0,0,0|monster|MauvePlant|1029,3,270000ms,180000ms,Mob011-1::On1029
-011-1,0,0,0,0|monster|AlizarinPlant|1032,1,2700000ms,1800000ms,Mob011-1::On1032
-011-1,0,0,0,0|monster|Silkworm|1035,2,60000ms,30000ms,Mob011-1::On1035
-011-1,0,0,0,0|monster|CloverPatch|1037,2,0ms,1000ms,Mob011-1::On1037
-011-1,0,0,0,0|monster|Squirrel|1038,25,30ms,20ms,Mob011-1::On1038
-011-1,0,0,0,0|monster|Butterfly|1055,10,30ms,20ms,Mob011-1::On1055
-011-1,0,0,0,0|monster|Mouboo|1028,5,0ms,10ms,Mob011-1::On1028
-011-1,1,1,0,0|monster|ManaBug|1131,18,30ms,0ms,Mob011-1::On1131
-011-1,92,44,35,28|monster|Maggot|1002,10,30ms,0ms,Mob011-1::On1002
-
-
-011-1,0,0,0|script|Mob011-1|32767
-{
- end;
-
-On1002:
- set @mobID, 1002;
- callfunc "MobPoints";
- end;
-
-On1013:
- set @mobID, 1013;
- callfunc "MobPoints";
- end;
-
-On1014:
- set @mobID, 1014;
- callfunc "MobPoints";
- end;
-
-On1019:
- set @mobID, 1019;
- callfunc "MobPoints";
- end;
-
-On1028:
- set @mobID, 1028;
- callfunc "MobPoints";
- end;
-
-On1029:
- set @mobID, 1029;
- callfunc "MobPoints";
- end;
-
-On1032:
- set @mobID, 1032;
- callfunc "MobPoints";
- end;
-
-On1035:
- set @mobID, 1035;
- callfunc "MobPoints";
- end;
-
-On1037:
- set @mobID, 1037;
- callfunc "MobPoints";
- end;
-
-On1038:
- set @mobID, 1038;
- callfunc "MobPoints";
- end;
-
-On1041:
- set @mobID, 1041;
- callfunc "MobPoints";
- end;
-
-On1055:
- set @mobID, 1055;
- callfunc "MobPoints";
- end;
-
-On1131:
- set @mobID, 1131;
- callfunc "MobPoints";
- end;
-}
+011-1,0,0,0,0|monster|EvilMushroom|1013,30,0ms,0ms
+011-1,0,0,0,0|monster|PinkFlower|1014,20,0ms,0ms
+011-1,0,0,0,0|monster|SpikyMushroom|1019,5,0ms,0ms
+011-1,0,0,0,0|monster|Snail|1041,1,0ms,0ms
+011-1,0,0,0,0|monster|Mouboo|1028,5,0ms,10ms
+011-1,0,0,0,0|monster|MauvePlant|1029,3,270000ms,180000ms
+011-1,0,0,0,0|monster|AlizarinPlant|1032,1,2700000ms,1800000ms
+011-1,0,0,0,0|monster|Silkworm|1035,2,60000ms,30000ms
+011-1,0,0,0,0|monster|CloverPatch|1037,2,0ms,1000ms
+011-1,0,0,0,0|monster|Squirrel|1038,25,30ms,20ms
+011-1,0,0,0,0|monster|Butterfly|1055,10,30ms,20ms
+011-1,0,0,0,0|monster|Mouboo|1028,5,0ms,10ms
+011-1,1,1,0,0|monster|ManaBug|1131,18,30ms,0ms
+011-1,92,44,35,28|monster|Maggot|1002,10,30ms,0ms
diff --git a/world/map/npc/011-1/_nodes.txt b/world/map/npc/011-1/_nodes.txt
new file mode 100644
index 00000000..12c08221
--- /dev/null
+++ b/world/map/npc/011-1/_nodes.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Woodland nodes
+
+// (no nodes)
diff --git a/world/map/npc/011-1/auldsbel.txt b/world/map/npc/011-1/auldsbel.txt
index 094651e9..f4c328ce 100644
--- a/world/map/npc/011-1/auldsbel.txt
+++ b/world/map/npc/011-1/auldsbel.txt
@@ -236,7 +236,7 @@ L_Sul_t_s:
mes "\"Very well, then. You have been quite helpful with my experiments, after all. As you may have noticed, the spell takes a pile of volcanic ashes. Close your hands around it, then whisper the invocation.\"";
next;
mes "[Auldsbel the Wizard]";
- mes "\"That invocation is '" + getspellinvocation("make-sulphur") + "'.\"";
+ mes "\"That invocation is '" + get(.invocation$, "make-sulphur") + "'.\"";
next;
mes "[Auldsbel the Wizard]";
mes "\"You may find that you can transmute the powder more effectively after a while; that is perfectly natural.\"";
@@ -332,7 +332,7 @@ L_about_nature:
L_about_other_spells:
mes "[Auldsbel the Wizard]";
- mes "\"A few spells are not claimed by any particular school of magic. In practice, this means that anyone can cast them if they just have sufficient magical power. The most prominent example is the 'detect magic' spell, '" + getspellinvocation("detect-magic") + "'.\"";
+ mes "\"A few spells are not claimed by any particular school of magic. In practice, this means that anyone can cast them if they just have sufficient magical power. The most prominent example is the 'detect magic' spell, '" + get(.invocation$, "detect-magic") + "'.\"";
next;
goto L_a_s_minimenu;
@@ -984,10 +984,10 @@ L_learn_spell:
mes "\"This spell is a simple transmutation invocation. All it takes is a clean wooden log. Hold it in your hand, focus your powers, and say the magic invocation.\"";
next;
mes "[Auldsbel the Wizard]";
- mes "\"You can turn the log into a wooden figurine by imagining the creature whose shape you want in your head and saying `" + getspellinvocation("transmute-wood-to-figurine") + ",' followed by the last syllable of the name of the creature you want to shape it into.\"";
+ mes "\"You can turn the log into a wooden figurine by imagining the creature whose shape you want in your head and saying `" + get(.invocation$, "spell-transmute-wood") + ",' followed by the last syllable of the name of the creature you want to shape it into.\"";
next;
mes "[Auldsbel the Wizard]";
- mes "\"So `" + getspellinvocation("transmute-wood-to-figurine") + " lurk' for a Skytlurk figurine, for example. If you know what a Skytlurk is, I mean, otherwise you will have a hard time imagining it. You may want to try some others instead, though.\"";
+ mes "\"So `" + get(.invocation$, "spell-transmute-wood") + " lurk' for a Skytlurk figurine, for example. If you know what a Skytlurk is, I mean, otherwise you will have a hard time imagining it. You may want to try some others instead, though.\"";
next;
mes "[Auldsbel the Wizard]";
mes "\"Oh... and it has to be the old Tritan name. Most creatures nowadays have very different names, but some old Tritan names have survived. Just try some, until you find one that fits.\"";
@@ -1001,7 +1001,7 @@ L_learn_spell:
L_repeat_spell:
mes "[Auldsbel the Wizard]";
- mes "\"The invocation is `" + getspellinvocation("transmute-wood-to-figurine") + ",' followed by the last syllable of the name of the creature you want to shape the log into. So `" + getspellinvocation("transmute-wood-to-figurine") + " lurk' for a Skytlurk figurine.\"";
+ mes "\"The invocation is `" + get(.invocation$, "spell-transmute-wood") + ",' followed by the last syllable of the name of the creature you want to shape the log into. So `" + get(.invocation$, "spell-transmute-wood") + " lurk' for a Skytlurk figurine.\"";
next;
mes "[Auldsbel the Wizard]";
mes "\"But keep two things in mind: First, you must KNOW what the creature looks like – so a Skytlurk probably won't work – and second, you must use the old Tritan name of it. `Fluffy' and `Scorpion' are modern names, so those won't work, you should try some others.\"";
@@ -1092,7 +1092,7 @@ L_Next9:
mes "[1000 experience points]";
next;
mes "[Auldsbel the Wizard]";
- mes "\"Now, listen carefully: to make a short tank top out of three pieces of cloth, you must use the invocation '" + getspellinvocation("make-short-tanktop") + "'.\"";
+ mes "\"Now, listen carefully: to make a short tank top out of three pieces of cloth, you must use the invocation '" + get(.invocation$, "make-short-tanktop") + "'.\"";
next;
mes "[Auldsbel the Wizard]";
mes "\"But be careful; transmutations can go wrong, and that can injure you. When you have more overall spellcasting practice, come back to me.\"";
@@ -1131,7 +1131,7 @@ L_Next10:
mes "[1000 experience points]";
next;
mes "[Auldsbel the Wizard]";
- mes "\"The next spell I have will make a normal tank top out of four pieces of cloth. The invocation is '" + getspellinvocation("make-tanktop") + "', make sure to write this down.\"";
+ mes "\"The next spell I have will make a normal tank top out of four pieces of cloth. The invocation is '" + get(.invocation$, "make-tanktop") + "', make sure to write this down.\"";
next;
goto L_main_menu;
@@ -1161,7 +1161,7 @@ L_Next11:
mes "[1000 experience points]";
next;
mes "[Auldsbel the Wizard]";
- mes "\"To make a shirt, use the invocation '" + getspellinvocation("make-shirt") + "'. This will require five pieces of cloth.\"";
+ mes "\"To make a shirt, use the invocation '" + get(.invocation$, "make-shirt") + "'. This will require five pieces of cloth.\"";
next;
goto L_main_menu;
@@ -1191,7 +1191,7 @@ L_Next12:
mes "[1000 experience points]";
next;
mes "[Auldsbel the Wizard]";
- mes "\"This spell makes arrows out of a single wooden log. Its invocation is '" + getspellinvocation("make-arrows") + "'.\"";
+ mes "\"This spell makes arrows out of a single wooden log. Its invocation is '" + get(.invocation$, "make-arrows") + "'.\"";
next;
goto L_main_menu;
@@ -1205,7 +1205,7 @@ L_stu_3:
L_stu_3_repeat:
mes "[Auldsbel the Wizard]";
- mes "\"This one has the invocation `" + getspellinvocation("make-concentration-potion") + "'. Put two cobalt leaves and two pink flower petals into a bottle of water, hold it up, and speak that phrase.\"";
+ mes "\"This one has the invocation `" + get(.invocation$, "make-concentration-potion") + "'. Put two cobalt leaves and two pink flower petals into a bottle of water, hold it up, and speak that phrase.\"";
next;
mes "[Auldsbel the Wizard]";
mes "\"It is a tricky spell, but if it works out, you will transform the bottle into a concentration potion.\"";
diff --git a/world/map/npc/011-3/_import.txt b/world/map/npc/011-3/_import.txt
index f916fcb2..d8dd3777 100644
--- a/world/map/npc/011-3/_import.txt
+++ b/world/map/npc/011-3/_import.txt
@@ -2,6 +2,7 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 011-3
npc: npc/011-3/_mobs.txt
+npc: npc/011-3/_nodes.txt
npc: npc/011-3/_warps.txt
npc: npc/011-3/hermit.txt
npc: npc/011-3/mapflags.txt
diff --git a/world/map/npc/011-3/_mobs.txt b/world/map/npc/011-3/_mobs.txt
index 4e4a504e..f90961fb 100644
--- a/world/map/npc/011-3/_mobs.txt
+++ b/world/map/npc/011-3/_mobs.txt
@@ -1,21 +1,5 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Hermit's Cave mobs
-011-3,0,0,0,0|monster|Bat|1017,10,0ms,0ms,Mob011-3::On1017
-011-3,0,0,0,0|monster|Silkworm|1035,3,60000ms,30000ms,Mob011-3::On1035
-
-
-011-3,0,0,0|script|Mob011-3|32767
-{
- end;
-
-On1017:
- set @mobID, 1017;
- callfunc "MobPoints";
- end;
-
-On1035:
- set @mobID, 1035;
- callfunc "MobPoints";
- end;
-}
+011-3,0,0,0,0|monster|Bat|1017,10,0ms,0ms
+011-3,0,0,0,0|monster|Silkworm|1035,3,60000ms,30000ms
diff --git a/world/map/npc/011-3/_nodes.txt b/world/map/npc/011-3/_nodes.txt
new file mode 100644
index 00000000..d9dd7661
--- /dev/null
+++ b/world/map/npc/011-3/_nodes.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Hermit's Cave nodes
+
+// (no nodes)
diff --git a/world/map/npc/011-4/_import.txt b/world/map/npc/011-4/_import.txt
index b7b835e1..1b654a65 100644
--- a/world/map/npc/011-4/_import.txt
+++ b/world/map/npc/011-4/_import.txt
@@ -2,6 +2,7 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 011-4
npc: npc/011-4/_mobs.txt
+npc: npc/011-4/_nodes.txt
npc: npc/011-4/_warps.txt
npc: npc/011-4/bl_barrier.txt
npc: npc/011-4/mapflags.txt
diff --git a/world/map/npc/011-4/_mobs.txt b/world/map/npc/011-4/_mobs.txt
index 81da8edc..92d32ddf 100644
--- a/world/map/npc/011-4/_mobs.txt
+++ b/world/map/npc/011-4/_mobs.txt
@@ -1,36 +1,10 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Lake Cave mobs
-011-4,52,30,39,39|monster|SpikyMushroom|1019,1,100000ms,30000ms,Mob011-4::On1019
-011-4,93,114,39,39|monster|CaveSnake|1021,1,100000ms,30000ms,Mob011-4::On1021
-011-4,0,0,0,0|monster|CaveSnake|1021,40,0ms,0ms,Mob011-4::On1021
-011-4,0,0,0,0|monster|SpikyMushroom|1019,15,0ms,0ms,Mob011-4::On1019
-011-4,60,78,56,75|monster|CaveMaggot|1056,10,100000ms,30000ms,Mob011-4::On1056
-011-4,63,21,110,35|monster|CaveMaggot|1056,10,100000ms,30000ms,Mob011-4::On1056
-011-4,0,0,0,0|monster|Bat|1017,20,180000ms,40000ms,Mob011-4::On1017
-
-
-011-4,0,0,0|script|Mob011-4|32767
-{
- end;
-
-On1017:
- set @mobID, 1017;
- callfunc "MobPoints";
- end;
-
-On1019:
- set @mobID, 1019;
- callfunc "MobPoints";
- end;
-
-On1021:
- set @mobID, 1021;
- callfunc "MobPoints";
- end;
-
-On1056:
- set @mobID, 1056;
- callfunc "MobPoints";
- end;
-}
+011-4,52,30,39,39|monster|SpikyMushroom|1019,1,100000ms,30000ms
+011-4,93,114,39,39|monster|CaveSnake|1021,1,100000ms,30000ms
+011-4,0,0,0,0|monster|CaveSnake|1021,40,0ms,0ms
+011-4,0,0,0,0|monster|SpikyMushroom|1019,15,0ms,0ms
+011-4,60,78,56,75|monster|CaveMaggot|1056,10,100000ms,30000ms
+011-4,63,21,110,35|monster|CaveMaggot|1056,10,100000ms,30000ms
+011-4,0,0,0,0|monster|Bat|1017,20,180000ms,40000ms
diff --git a/world/map/npc/011-4/_nodes.txt b/world/map/npc/011-4/_nodes.txt
new file mode 100644
index 00000000..d439cbc5
--- /dev/null
+++ b/world/map/npc/011-4/_nodes.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Lake Cave nodes
+
+// (no nodes)
diff --git a/world/map/npc/011-6/_import.txt b/world/map/npc/011-6/_import.txt
index 34a781ad..216402e5 100644
--- a/world/map/npc/011-6/_import.txt
+++ b/world/map/npc/011-6/_import.txt
@@ -2,6 +2,7 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 011-6
npc: npc/011-6/_mobs.txt
+npc: npc/011-6/_nodes.txt
npc: npc/011-6/_warps.txt
npc: npc/011-6/barrier.txt
npc: npc/011-6/bryant.txt
diff --git a/world/map/npc/011-6/_mobs.txt b/world/map/npc/011-6/_mobs.txt
index 4ba7f2ee..6a6ea09d 100644
--- a/world/map/npc/011-6/_mobs.txt
+++ b/world/map/npc/011-6/_mobs.txt
@@ -1,96 +1,50 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Bandit Cave mobs
-011-6,152,72,283,127|monster|Silkworm|1035,9,30000ms,100000ms,Mob011-6::On1035
-011-6,263,38,30,34|monster|Bandit|1064,1,30000ms,30000ms,Mob011-6::On1064
-011-6,262,114,38,38|monster|Bandit|1064,1,30000ms,30000ms,Mob011-6::On1064
-011-6,132,119,17,21|monster|Bandit|1064,1,30000ms,30000ms,Mob011-6::On1064
-011-6,170,66,17,21|monster|Bandit|1064,1,30000ms,30000ms,Mob011-6::On1064
-011-6,67,70,17,21|monster|Bandit|1064,1,30000ms,30000ms,Mob011-6::On1064
-011-6,196,107,17,21|monster|Bandit|1064,1,30000ms,30000ms,Mob011-6::On1064
-011-6,196,29,17,21|monster|Bandit|1064,1,30000ms,30000ms,Mob011-6::On1064
-011-6,36,37,17,21|monster|Bandit|1064,1,30000ms,30000ms,Mob011-6::On1064
-011-6,112,40,45,48|monster|Bandit|1064,2,30000ms,60000ms,Mob011-6::On1064
-011-6,31,99,17,21|monster|Bandit|1064,1,30000ms,30000ms,Mob011-6::On1064
-011-6,223,250,123,65|monster|Bat|1017,5,30000ms,100000ms,Mob011-6::On1017
-011-6,224,175,118,25|monster|Bat|1017,3,30000ms,100000ms,Mob011-6::On1017
-011-6,257,77,4,126|monster|Bat|1017,6,30000ms,100000ms,Mob011-6::On1017
-011-6,192,77,4,126|monster|Bat|1017,9,30000ms,100000ms,Mob011-6::On1017
-011-6,167,110,87,13|monster|Bat|1017,9,30000ms,100000ms,Mob011-6::On1017
-011-6,75,70,104,96|monster|Bat|1017,23,30000ms,100000ms,Mob011-6::On1017
-011-6,78,195,129,97|monster|Bat|1017,9,30000ms,100000ms,Mob011-6::On1017
-011-6,168,109,36,37|monster|SpikyMushroom|1019,5,30000ms,100000ms,Mob011-6::On1019
-011-6,199,76,36,37|monster|SpikyMushroom|1019,5,30000ms,100000ms,Mob011-6::On1019
-011-6,88,163,29,27|monster|SpikyMushroom|1019,5,30000ms,100000ms,Mob011-6::On1019
-011-6,48,113,35,19|monster|SpikyMushroom|1019,5,30000ms,100000ms,Mob011-6::On1019
-011-6,177,94,20,28|monster|EvilMushroom|1013,4,30000ms,100000ms,Mob011-6::On1013
-011-6,194,49,20,28|monster|EvilMushroom|1013,2,30000ms,100000ms,Mob011-6::On1013
-011-6,51,115,47,24|monster|EvilMushroom|1013,2,30000ms,100000ms,Mob011-6::On1013
-011-6,63,169,13,17|monster|EvilMushroom|1013,2,30000ms,100000ms,Mob011-6::On1013
-011-6,100,226,29,14|monster|SpikyMushroom|1019,3,30000ms,100000ms,Mob011-6::On1019
-011-6,260,44,53,16|monster|SpikyMushroom|1019,3,30000ms,100000ms,Mob011-6::On1019
-011-6,272,48,21,28|monster|EvilMushroom|1013,2,30000ms,100000ms,Mob011-6::On1013
-011-6,95,78,31,25|monster|YellowSlime|1007,5,30000ms,100000ms,Mob011-6::On1007
-011-6,59,36,19,25|monster|YellowSlime|1007,5,30000ms,100000ms,Mob011-6::On1007
-011-6,26,69,19,25|monster|YellowSlime|1007,5,30000ms,100000ms,Mob011-6::On1007
-011-6,61,101,14,10|monster|YellowSlime|1007,3,30000ms,100000ms,Mob011-6::On1007
-011-6,50,61,9,12|monster|YellowSlime|1007,3,30000ms,100000ms,Mob011-6::On1007
-011-6,128,39,9,12|monster|YellowSlime|1007,3,30000ms,100000ms,Mob011-6::On1007
-011-6,41,178,9,12|monster|YellowSlime|1007,1,30000ms,100000ms,Mob011-6::On1007
-011-6,70,229,9,12|monster|YellowSlime|1007,1,30000ms,100000ms,Mob011-6::On1007
-011-6,20,204,9,12|monster|YellowSlime|1007,1,30000ms,100000ms,Mob011-6::On1007
-011-6,114,190,9,12|monster|YellowSlime|1007,4,30000ms,100000ms,Mob011-6::On1007
-011-6,137,205,9,12|monster|YellowSlime|1007,2,30000ms,100000ms,Mob011-6::On1007
-011-6,79,220,29,14|monster|CaveSnake|1021,3,30000ms,100000ms,Mob011-6::On1021
-011-6,115,210,29,14|monster|CaveSnake|1021,3,30000ms,100000ms,Mob011-6::On1021
-011-6,41,193,31,31|monster|CaveSnake|1021,3,30000ms,100000ms,Mob011-6::On1021
-011-6,70,143,31,31|monster|CaveSnake|1021,3,30000ms,100000ms,Mob011-6::On1021
-011-6,97,183,29,14|monster|CaveSnake|1021,3,30000ms,100000ms,Mob011-6::On1021
-011-6,172,252,9,12|monster|CaveMaggot|1056,4,30000ms,100000ms,Mob011-6::On1056
-011-6,263,236,16,5|monster|CaveMaggot|1056,3,30000ms,100000ms,Mob011-6::On1056
-
-
-011-6,0,0,0|script|Mob011-6|32767
-{
- end;
-
-On1007:
- set @mobID, 1007;
- callfunc "MobPoints";
- end;
-
-On1013:
- set @mobID, 1013;
- callfunc "MobPoints";
- end;
-
-On1017:
- set @mobID, 1017;
- callfunc "MobPoints";
- end;
-
-On1019:
- set @mobID, 1019;
- callfunc "MobPoints";
- end;
-
-On1021:
- set @mobID, 1021;
- callfunc "MobPoints";
- end;
-
-On1035:
- set @mobID, 1035;
- callfunc "MobPoints";
- end;
-
-On1056:
- set @mobID, 1056;
- callfunc "MobPoints";
- end;
-
-On1064:
- set @mobID, 1064;
- callfunc "MobPoints";
- end;
-}
+011-6,152,72,283,127|monster|Silkworm|1035,9,30000ms,100000ms
+011-6,263,38,30,34|monster|Bandit|1064,1,30000ms,30000ms
+011-6,262,114,38,38|monster|Bandit|1064,1,30000ms,30000ms
+011-6,132,119,17,21|monster|Bandit|1064,1,30000ms,30000ms
+011-6,170,66,17,21|monster|Bandit|1064,1,30000ms,30000ms
+011-6,67,70,17,21|monster|Bandit|1064,1,30000ms,30000ms
+011-6,196,107,17,21|monster|Bandit|1064,1,30000ms,30000ms
+011-6,196,29,17,21|monster|Bandit|1064,1,30000ms,30000ms
+011-6,36,37,17,21|monster|Bandit|1064,1,30000ms,30000ms
+011-6,112,40,45,48|monster|Bandit|1064,2,30000ms,60000ms
+011-6,31,99,17,21|monster|Bandit|1064,1,30000ms,30000ms
+011-6,223,250,123,65|monster|Bat|1017,5,30000ms,100000ms
+011-6,224,175,118,25|monster|Bat|1017,3,30000ms,100000ms
+011-6,257,77,4,126|monster|Bat|1017,6,30000ms,100000ms
+011-6,192,77,4,126|monster|Bat|1017,9,30000ms,100000ms
+011-6,167,110,87,13|monster|Bat|1017,9,30000ms,100000ms
+011-6,75,70,104,96|monster|Bat|1017,23,30000ms,100000ms
+011-6,78,195,129,97|monster|Bat|1017,9,30000ms,100000ms
+011-6,168,109,36,37|monster|SpikyMushroom|1019,5,30000ms,100000ms
+011-6,199,76,36,37|monster|SpikyMushroom|1019,5,30000ms,100000ms
+011-6,88,163,29,27|monster|SpikyMushroom|1019,5,30000ms,100000ms
+011-6,48,113,35,19|monster|SpikyMushroom|1019,5,30000ms,100000ms
+011-6,177,94,20,28|monster|EvilMushroom|1013,4,30000ms,100000ms
+011-6,194,49,20,28|monster|EvilMushroom|1013,2,30000ms,100000ms
+011-6,51,115,47,24|monster|EvilMushroom|1013,2,30000ms,100000ms
+011-6,63,169,13,17|monster|EvilMushroom|1013,2,30000ms,100000ms
+011-6,100,226,29,14|monster|SpikyMushroom|1019,3,30000ms,100000ms
+011-6,260,44,53,16|monster|SpikyMushroom|1019,3,30000ms,100000ms
+011-6,272,48,21,28|monster|EvilMushroom|1013,2,30000ms,100000ms
+011-6,95,78,31,25|monster|YellowSlime|1007,5,30000ms,100000ms
+011-6,59,36,19,25|monster|YellowSlime|1007,5,30000ms,100000ms
+011-6,26,69,19,25|monster|YellowSlime|1007,5,30000ms,100000ms
+011-6,61,101,14,10|monster|YellowSlime|1007,3,30000ms,100000ms
+011-6,50,61,9,12|monster|YellowSlime|1007,3,30000ms,100000ms
+011-6,128,39,9,12|monster|YellowSlime|1007,3,30000ms,100000ms
+011-6,41,178,9,12|monster|YellowSlime|1007,1,30000ms,100000ms
+011-6,70,229,9,12|monster|YellowSlime|1007,1,30000ms,100000ms
+011-6,20,204,9,12|monster|YellowSlime|1007,1,30000ms,100000ms
+011-6,114,190,9,12|monster|YellowSlime|1007,4,30000ms,100000ms
+011-6,137,205,9,12|monster|YellowSlime|1007,2,30000ms,100000ms
+011-6,79,220,29,14|monster|CaveSnake|1021,3,30000ms,100000ms
+011-6,115,210,29,14|monster|CaveSnake|1021,3,30000ms,100000ms
+011-6,41,193,31,31|monster|CaveSnake|1021,3,30000ms,100000ms
+011-6,70,143,31,31|monster|CaveSnake|1021,3,30000ms,100000ms
+011-6,97,183,29,14|monster|CaveSnake|1021,3,30000ms,100000ms
+011-6,172,252,9,12|monster|CaveMaggot|1056,4,30000ms,100000ms
+011-6,263,236,16,5|monster|CaveMaggot|1056,3,30000ms,100000ms
diff --git a/world/map/npc/011-6/_nodes.txt b/world/map/npc/011-6/_nodes.txt
new file mode 100644
index 00000000..7a5c6a33
--- /dev/null
+++ b/world/map/npc/011-6/_nodes.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Bandit Cave nodes
+
+// (no nodes)
diff --git a/world/map/npc/012-1/_import.txt b/world/map/npc/012-1/_import.txt
index 0a7ff68b..4ce6c34d 100644
--- a/world/map/npc/012-1/_import.txt
+++ b/world/map/npc/012-1/_import.txt
@@ -2,6 +2,7 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 012-1
npc: npc/012-1/_mobs.txt
+npc: npc/012-1/_nodes.txt
npc: npc/012-1/_warps.txt
npc: npc/012-1/amrak.txt
npc: npc/012-1/flowerpentagram2.txt
diff --git a/world/map/npc/012-1/_mobs.txt b/world/map/npc/012-1/_mobs.txt
index cdcc8730..4f85e2ff 100644
--- a/world/map/npc/012-1/_mobs.txt
+++ b/world/map/npc/012-1/_mobs.txt
@@ -1,75 +1,14 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Woodland Hills mobs
-012-1,0,0,0,0|monster|PinkFlower|1014,13,0ms,100ms,Mob012-1::On1014
-012-1,0,0,0,0|monster|SpikyMushroom|1019,25,0ms,10ms,Mob012-1::On1019
-012-1,0,0,0,0|monster|Mouboo|1028,20,0ms,10ms,Mob012-1::On1028
-012-1,0,0,0,0|monster|MauvePlant|1029,5,2700000ms,1800000ms,Mob012-1::On1029
-012-1,0,0,0,0|monster|CobaltPlant|1030,2,2700000ms,1800000ms,Mob012-1::On1030
-012-1,0,0,0,0|monster|GambogePlant|1031,2,2700000ms,1800000ms,Mob012-1::On1031
-012-1,0,0,0,0|monster|AlizarinPlant|1032,2,2700000ms,1800000ms,Mob012-1::On1032
-012-1,0,0,0,0|monster|Silkworm|1035,5,60000ms,30000ms,Mob012-1::On1035
-012-1,0,0,0,0|monster|CloverPatch|1037,2,0ms,1000ms,Mob012-1::On1037
-012-1,0,0,0,0|monster|Squirrel|1038,25,30ms,20ms,Mob012-1::On1038
-012-1,0,0,0,0|monster|Butterfly|1055,20,30ms,20ms,Mob012-1::On1055
-
-
-012-1,0,0,0|script|Mob012-1|32767
-{
- end;
-
-On1014:
- set @mobID, 1014;
- callfunc "MobPoints";
- end;
-
-On1019:
- set @mobID, 1019;
- callfunc "MobPoints";
- end;
-
-On1028:
- set @mobID, 1028;
- callfunc "MobPoints";
- end;
-
-On1029:
- set @mobID, 1029;
- callfunc "MobPoints";
- end;
-
-On1030:
- set @mobID, 1030;
- callfunc "MobPoints";
- end;
-
-On1031:
- set @mobID, 1031;
- callfunc "MobPoints";
- end;
-
-On1032:
- set @mobID, 1032;
- callfunc "MobPoints";
- end;
-
-On1035:
- set @mobID, 1035;
- callfunc "MobPoints";
- end;
-
-On1037:
- set @mobID, 1037;
- callfunc "MobPoints";
- end;
-
-On1038:
- set @mobID, 1038;
- callfunc "MobPoints";
- end;
-
-On1055:
- set @mobID, 1055;
- callfunc "MobPoints";
- end;
-}
+012-1,0,0,0,0|monster|PinkFlower|1014,13,0ms,100ms
+012-1,0,0,0,0|monster|SpikyMushroom|1019,25,0ms,10ms
+012-1,0,0,0,0|monster|Mouboo|1028,20,0ms,10ms
+012-1,0,0,0,0|monster|MauvePlant|1029,5,2700000ms,1800000ms
+012-1,0,0,0,0|monster|CobaltPlant|1030,2,2700000ms,1800000ms
+012-1,0,0,0,0|monster|GambogePlant|1031,2,2700000ms,1800000ms
+012-1,0,0,0,0|monster|AlizarinPlant|1032,2,2700000ms,1800000ms
+012-1,0,0,0,0|monster|Silkworm|1035,5,60000ms,30000ms
+012-1,0,0,0,0|monster|CloverPatch|1037,2,0ms,1000ms
+012-1,0,0,0,0|monster|Squirrel|1038,25,30ms,20ms
+012-1,0,0,0,0|monster|Butterfly|1055,20,30ms,20ms
diff --git a/world/map/npc/012-1/_nodes.txt b/world/map/npc/012-1/_nodes.txt
new file mode 100644
index 00000000..13ee4f92
--- /dev/null
+++ b/world/map/npc/012-1/_nodes.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Woodland Hills nodes
+
+// (no nodes)
diff --git a/world/map/npc/012-3/_import.txt b/world/map/npc/012-3/_import.txt
index 2f9275c8..82b77be8 100644
--- a/world/map/npc/012-3/_import.txt
+++ b/world/map/npc/012-3/_import.txt
@@ -2,6 +2,7 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 012-3
npc: npc/012-3/_mobs.txt
+npc: npc/012-3/_nodes.txt
npc: npc/012-3/_warps.txt
npc: npc/012-3/mana-seed.txt
npc: npc/012-3/mapflags.txt
diff --git a/world/map/npc/012-3/_mobs.txt b/world/map/npc/012-3/_mobs.txt
index 354fc289..e9314763 100644
--- a/world/map/npc/012-3/_mobs.txt
+++ b/world/map/npc/012-3/_mobs.txt
@@ -1,40 +1,19 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Moggun Cave mobs
-012-3,448,65,18,7|monster|Moggun|1061,5,100000ms,30000ms,Mob012-3::On1061
-012-3,442,45,18,7|monster|Moggun|1061,5,100000ms,30000ms,Mob012-3::On1061
-012-3,412,31,18,7|monster|Moggun|1061,5,100000ms,30000ms,Mob012-3::On1061
-012-3,347,39,8,16|monster|Moggun|1061,5,100000ms,30000ms,Mob012-3::On1061
-012-3,363,101,17,18|monster|Moggun|1061,10,100000ms,30000ms,Mob012-3::On1061
-012-3,446,81,18,7|monster|Moggun|1061,5,100000ms,30000ms,Mob012-3::On1061
-012-3,388,138,17,7|monster|Moggun|1061,5,100000ms,30000ms,Mob012-3::On1061
-012-3,409,78,8,17|monster|Moggun|1061,5,100000ms,30000ms,Mob012-3::On1061
-012-3,382,152,17,7|monster|Moggun|1061,5,100000ms,30000ms,Mob012-3::On1061
-012-3,430,117,8,16|monster|Moggun|1061,5,100000ms,30000ms,Mob012-3::On1061
-012-3,330,100,8,16|monster|Moggun|1061,5,100000ms,30000ms,Mob012-3::On1061
-012-3,269,138,17,18|monster|Moggun|1061,10,100000ms,30000ms,Mob012-3::On1061
-012-3,188,52,17,18|monster|Moggun|1061,10,100000ms,30000ms,Mob012-3::On1061
-012-3,165,106,17,18|monster|Moggun|1061,10,100000ms,30000ms,Mob012-3::On1061
-012-3,0,0,0,0|monster|Bat|1017,100,0ms,0ms,Mob012-3::On1017
-012-3,0,0,0,0|monster|CaveSnake|1021,75,0ms,0ms,Mob012-3::On1021
-
-
-012-3,0,0,0|script|Mob012-3|32767
-{
- end;
-
-On1017:
- set @mobID, 1017;
- callfunc "MobPoints";
- end;
-
-On1021:
- set @mobID, 1021;
- callfunc "MobPoints";
- end;
-
-On1061:
- set @mobID, 1061;
- callfunc "MobPoints";
- end;
-}
+012-3,448,65,18,7|monster|Moggun|1061,5,100000ms,30000ms
+012-3,442,45,18,7|monster|Moggun|1061,5,100000ms,30000ms
+012-3,412,31,18,7|monster|Moggun|1061,5,100000ms,30000ms
+012-3,347,39,8,16|monster|Moggun|1061,5,100000ms,30000ms
+012-3,363,101,17,18|monster|Moggun|1061,10,100000ms,30000ms
+012-3,446,81,18,7|monster|Moggun|1061,5,100000ms,30000ms
+012-3,388,138,17,7|monster|Moggun|1061,5,100000ms,30000ms
+012-3,409,78,8,17|monster|Moggun|1061,5,100000ms,30000ms
+012-3,382,152,17,7|monster|Moggun|1061,5,100000ms,30000ms
+012-3,430,117,8,16|monster|Moggun|1061,5,100000ms,30000ms
+012-3,330,100,8,16|monster|Moggun|1061,5,100000ms,30000ms
+012-3,269,138,17,18|monster|Moggun|1061,10,100000ms,30000ms
+012-3,188,52,17,18|monster|Moggun|1061,10,100000ms,30000ms
+012-3,165,106,17,18|monster|Moggun|1061,10,100000ms,30000ms
+012-3,0,0,0,0|monster|Bat|1017,100,0ms,0ms
+012-3,0,0,0,0|monster|CaveSnake|1021,75,0ms,0ms
diff --git a/world/map/npc/012-3/_nodes.txt b/world/map/npc/012-3/_nodes.txt
new file mode 100644
index 00000000..ea6a8cae
--- /dev/null
+++ b/world/map/npc/012-3/_nodes.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Moggun Cave nodes
+
+// (no nodes)
diff --git a/world/map/npc/012-3/mana-seed.txt b/world/map/npc/012-3/mana-seed.txt
index bb479c2b..c75125e4 100644
--- a/world/map/npc/012-3/mana-seed.txt
+++ b/world/map/npc/012-3/mana-seed.txt
@@ -37,7 +37,7 @@
"You may only be children, but you recognize that it is this man only who can save the world. As the walls rush towards you to crush your small group, you exchange a glance with your twin sister – there is no doubt what you must do...",
"The sacred place is surrounded by nothingness; were it not for your magic, you would have no hope of returning. The old and young man stands nearby; he has been waiting for you, for centuries. He has all the time in the world, after all...",
"Nothing remains behind. The underground castle is empty now, its chambers plundered, its throne destroyed. Shivering, you climb down the stairs, towards the wailing of the underworld that is waiting beneath...",
- "You feel soft, fluffy fur brushing against your skin and are filled with happiness. Somehow, the word `" + getspellinvocation("happy-curse") + "' comes to mind...";
+ "You feel soft, fluffy fur brushing against your skin and are filled with happiness. Somehow, the word `" + get(.invocation$, "happy-curse") + "' comes to mind...";
set @max_magic, 2;
diff --git a/world/map/npc/012-4/_import.txt b/world/map/npc/012-4/_import.txt
index 6dc69dad..ecf5657f 100644
--- a/world/map/npc/012-4/_import.txt
+++ b/world/map/npc/012-4/_import.txt
@@ -2,6 +2,7 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 012-4
npc: npc/012-4/_mobs.txt
+npc: npc/012-4/_nodes.txt
npc: npc/012-4/_warps.txt
npc: npc/012-4/mapflags.txt
npc: npc/012-4/pvpflag.txt
diff --git a/world/map/npc/012-4/_mobs.txt b/world/map/npc/012-4/_mobs.txt
index e1a4a259..142ec427 100644
--- a/world/map/npc/012-4/_mobs.txt
+++ b/world/map/npc/012-4/_mobs.txt
@@ -1,113 +1,67 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Terranite Cave mobs
-012-4,217,45,12,3|monster|Moggun|1061,3,100000ms,30000ms,Mob012-4::On1061
-012-4,223,30,12,3|monster|Moggun|1061,3,100000ms,30000ms,Mob012-4::On1061
-012-4,239,48,12,3|monster|Moggun|1061,3,100000ms,30000ms,Mob012-4::On1061
-012-4,197,39,7,8|monster|Moggun|1061,3,100000ms,30000ms,Mob012-4::On1061
-012-4,210,35,7,8|monster|Bat|1017,5,100000ms,30000ms,Mob012-4::On1017
-012-4,241,38,7,8|monster|Bat|1017,5,100000ms,30000ms,Mob012-4::On1017
-012-4,237,59,7,8|monster|Bat|1017,5,100000ms,30000ms,Mob012-4::On1017
-012-4,226,73,7,8|monster|Bat|1017,5,100000ms,30000ms,Mob012-4::On1017
-012-4,209,94,9,5|monster|Bat|1017,5,100000ms,30000ms,Mob012-4::On1017
-012-4,263,29,7,8|monster|Bat|1017,5,100000ms,30000ms,Mob012-4::On1017
-012-4,274,48,7,8|monster|Bat|1017,5,100000ms,30000ms,Mob012-4::On1017
-012-4,267,70,7,8|monster|Bat|1017,5,100000ms,30000ms,Mob012-4::On1017
-012-4,259,79,7,8|monster|Bat|1017,5,100000ms,30000ms,Mob012-4::On1017
-012-4,274,79,7,8|monster|Bat|1017,5,100000ms,30000ms,Mob012-4::On1017
-012-4,268,91,24,15|monster|Moggun|1061,10,100000ms,30000ms,Mob012-4::On1061
-012-4,209,146,69,55|monster|Spider|1012,50,100000ms,30000ms,Mob012-4::On1012
-012-4,254,163,19,46|monster|YellowSlime|1007,10,100000ms,30000ms,Mob012-4::On1007
-012-4,167,175,17,22|monster|YellowSlime|1007,10,100000ms,30000ms,Mob012-4::On1007
-012-4,148,176,17,22|monster|RedSlime|1008,20,100000ms,30000ms,Mob012-4::On1008
-012-4,131,88,17,22|monster|RedSlime|1008,15,100000ms,30000ms,Mob012-4::On1008
-012-4,140,131,17,22|monster|YellowSlime|1007,10,100000ms,30000ms,Mob012-4::On1007
-012-4,42,128,17,9|monster|YellowSlime|1007,10,100000ms,30000ms,Mob012-4::On1007
-012-4,64,62,25,30|monster|Spider|1012,20,100000ms,30000ms,Mob012-4::On1012
-012-4,69,89,17,21|monster|YellowSlime|1007,10,100000ms,30000ms,Mob012-4::On1007
-012-4,34,45,17,33|monster|Terranite|1062,3,100000ms,30000ms,Mob012-4::On1062
-012-4,64,36,24,17|monster|Skeleton|1043,3,100000ms,30000ms,Mob012-4::On1043
-012-4,100,115,24,17|monster|Skeleton|1043,3,100000ms,30000ms,Mob012-4::On1043
-012-4,90,137,17,22|monster|YellowSlime|1007,10,100000ms,30000ms,Mob012-4::On1007
-012-4,59,113,14,17|monster|LadySkeleton|1044,3,100000ms,30000ms,Mob012-4::On1044
-012-4,42,176,15,13|monster|Terranite|1062,3,100000ms,30000ms,Mob012-4::On1062
-012-4,120,177,24,17|monster|LadySkeleton|1044,3,100000ms,30000ms,Mob012-4::On1044
-012-4,287,180,24,17|monster|LadySkeleton|1044,3,100000ms,30000ms,Mob012-4::On1044
-012-4,340,175,24,17|monster|Skeleton|1043,3,100000ms,30000ms,Mob012-4::On1043
-012-4,390,156,69,54|monster|Spider|1012,40,100000ms,30000ms,Mob012-4::On1012
-012-4,358,37,20,22|monster|Terranite|1062,3,100000ms,30000ms,Mob012-4::On1062
-012-4,481,110,19,24|monster|Terranite|1062,3,100000ms,30000ms,Mob012-4::On1062
-012-4,435,114,24,17|monster|Skeleton|1043,3,100000ms,30000ms,Mob012-4::On1043
-012-4,477,82,24,17|monster|LadySkeleton|1044,3,100000ms,30000ms,Mob012-4::On1044
-012-4,354,106,19,46|monster|YellowSlime|1007,10,100000ms,30000ms,Mob012-4::On1007
-012-4,342,139,17,22|monster|RedSlime|1008,15,100000ms,30000ms,Mob012-4::On1008
-012-4,389,81,33,15|monster|RedSlime|1008,20,100000ms,30000ms,Mob012-4::On1008
-012-4,409,35,7,8|monster|Bat|1017,5,100000ms,30000ms,Mob012-4::On1017
-012-4,413,73,7,8|monster|Bat|1017,5,100000ms,30000ms,Mob012-4::On1017
-012-4,395,63,7,8|monster|Bat|1017,5,100000ms,30000ms,Mob012-4::On1017
-012-4,314,182,7,8|monster|Bat|1017,5,100000ms,30000ms,Mob012-4::On1017
-012-4,409,121,7,8|monster|Bat|1017,5,100000ms,30000ms,Mob012-4::On1017
-012-4,456,99,7,8|monster|Bat|1017,5,100000ms,30000ms,Mob012-4::On1017
-012-4,133,153,9,5|monster|Bat|1017,5,100000ms,30000ms,Mob012-4::On1017
-012-4,153,98,9,5|monster|Bat|1017,5,100000ms,30000ms,Mob012-4::On1017
-012-4,126,65,9,5|monster|Bat|1017,5,100000ms,30000ms,Mob012-4::On1017
-012-4,81,180,9,5|monster|Bat|1017,5,100000ms,30000ms,Mob012-4::On1017
-012-4,61,159,9,5|monster|Bat|1017,5,100000ms,30000ms,Mob012-4::On1017
-012-4,271,157,7,8|monster|Bat|1017,5,100000ms,30000ms,Mob012-4::On1017
-012-4,270,182,7,8|monster|Bat|1017,5,100000ms,30000ms,Mob012-4::On1017
-012-4,322,141,17,22|monster|RedSlime|1008,20,100000ms,30000ms,Mob012-4::On1008
-012-4,451,111,7,8|monster|Bat|1017,5,100000ms,30000ms,Mob012-4::On1017
-012-4,422,50,11,32|monster|Spider|1012,10,100000ms,30000ms,Mob012-4::On1012
-012-4,380,40,14,22|monster|Spider|1012,10,100000ms,30000ms,Mob012-4::On1012
-012-4,124,49,9,24|monster|Terranite|1062,1,100000ms,30000ms,Mob012-4::On1062
-012-4,80,110,9,5|monster|Bat|1017,5,100000ms,30000ms,Mob012-4::On1017
-012-4,42,142,20,11|monster|Skeleton|1043,3,100000ms,30000ms,Mob012-4::On1043
-012-4,41,159,11,20|monster|Spider|1012,20,100000ms,30000ms,Mob012-4::On1012
-012-4,95,180,9,5|monster|Bat|1017,5,100000ms,30000ms,Mob012-4::On1017
-012-4,91,180,23,10|monster|Spider|1012,20,100000ms,30000ms,Mob012-4::On1012
-
-
-012-4,0,0,0|script|Mob012-4|32767
-{
- end;
-
-On1007:
- set @mobID, 1007;
- callfunc "MobPoints";
- end;
-
-On1008:
- set @mobID, 1008;
- callfunc "MobPoints";
- end;
-
-On1012:
- set @mobID, 1012;
- callfunc "MobPoints";
- end;
-
-On1017:
- set @mobID, 1017;
- callfunc "MobPoints";
- end;
-
-On1043:
- set @mobID, 1043;
- callfunc "MobPoints";
- end;
-
-On1044:
- set @mobID, 1044;
- callfunc "MobPoints";
- end;
-
-On1061:
- set @mobID, 1061;
- callfunc "MobPoints";
- end;
-
-On1062:
- set @mobID, 1062;
- callfunc "MobPoints";
- end;
-}
+012-4,217,45,12,3|monster|Moggun|1061,3,100000ms,30000ms
+012-4,223,30,12,3|monster|Moggun|1061,3,100000ms,30000ms
+012-4,239,48,12,3|monster|Moggun|1061,3,100000ms,30000ms
+012-4,197,39,7,8|monster|Moggun|1061,3,100000ms,30000ms
+012-4,210,35,7,8|monster|Bat|1017,5,100000ms,30000ms
+012-4,241,38,7,8|monster|Bat|1017,5,100000ms,30000ms
+012-4,237,59,7,8|monster|Bat|1017,5,100000ms,30000ms
+012-4,226,73,7,8|monster|Bat|1017,5,100000ms,30000ms
+012-4,209,94,9,5|monster|Bat|1017,5,100000ms,30000ms
+012-4,263,29,7,8|monster|Bat|1017,5,100000ms,30000ms
+012-4,274,48,7,8|monster|Bat|1017,5,100000ms,30000ms
+012-4,267,70,7,8|monster|Bat|1017,5,100000ms,30000ms
+012-4,259,79,7,8|monster|Bat|1017,5,100000ms,30000ms
+012-4,274,79,7,8|monster|Bat|1017,5,100000ms,30000ms
+012-4,268,91,24,15|monster|Moggun|1061,10,100000ms,30000ms
+012-4,209,146,69,55|monster|Spider|1012,50,100000ms,30000ms
+012-4,254,163,19,46|monster|YellowSlime|1007,10,100000ms,30000ms
+012-4,167,175,17,22|monster|YellowSlime|1007,10,100000ms,30000ms
+012-4,148,176,17,22|monster|RedSlime|1008,20,100000ms,30000ms
+012-4,131,88,17,22|monster|RedSlime|1008,15,100000ms,30000ms
+012-4,140,131,17,22|monster|YellowSlime|1007,10,100000ms,30000ms
+012-4,42,128,17,9|monster|YellowSlime|1007,10,100000ms,30000ms
+012-4,64,62,25,30|monster|Spider|1012,20,100000ms,30000ms
+012-4,69,89,17,21|monster|YellowSlime|1007,10,100000ms,30000ms
+012-4,34,45,17,33|monster|Terranite|1062,3,100000ms,30000ms
+012-4,64,36,24,17|monster|Skeleton|1043,3,100000ms,30000ms
+012-4,100,115,24,17|monster|Skeleton|1043,3,100000ms,30000ms
+012-4,90,137,17,22|monster|YellowSlime|1007,10,100000ms,30000ms
+012-4,59,113,14,17|monster|LadySkeleton|1044,3,100000ms,30000ms
+012-4,42,176,15,13|monster|Terranite|1062,3,100000ms,30000ms
+012-4,120,177,24,17|monster|LadySkeleton|1044,3,100000ms,30000ms
+012-4,287,180,24,17|monster|LadySkeleton|1044,3,100000ms,30000ms
+012-4,340,175,24,17|monster|Skeleton|1043,3,100000ms,30000ms
+012-4,390,156,69,54|monster|Spider|1012,40,100000ms,30000ms
+012-4,358,37,20,22|monster|Terranite|1062,3,100000ms,30000ms
+012-4,481,110,19,24|monster|Terranite|1062,3,100000ms,30000ms
+012-4,435,114,24,17|monster|Skeleton|1043,3,100000ms,30000ms
+012-4,477,82,24,17|monster|LadySkeleton|1044,3,100000ms,30000ms
+012-4,354,106,19,46|monster|YellowSlime|1007,10,100000ms,30000ms
+012-4,342,139,17,22|monster|RedSlime|1008,15,100000ms,30000ms
+012-4,389,81,33,15|monster|RedSlime|1008,20,100000ms,30000ms
+012-4,409,35,7,8|monster|Bat|1017,5,100000ms,30000ms
+012-4,413,73,7,8|monster|Bat|1017,5,100000ms,30000ms
+012-4,395,63,7,8|monster|Bat|1017,5,100000ms,30000ms
+012-4,314,182,7,8|monster|Bat|1017,5,100000ms,30000ms
+012-4,409,121,7,8|monster|Bat|1017,5,100000ms,30000ms
+012-4,456,99,7,8|monster|Bat|1017,5,100000ms,30000ms
+012-4,133,153,9,5|monster|Bat|1017,5,100000ms,30000ms
+012-4,153,98,9,5|monster|Bat|1017,5,100000ms,30000ms
+012-4,126,65,9,5|monster|Bat|1017,5,100000ms,30000ms
+012-4,81,180,9,5|monster|Bat|1017,5,100000ms,30000ms
+012-4,61,159,9,5|monster|Bat|1017,5,100000ms,30000ms
+012-4,271,157,7,8|monster|Bat|1017,5,100000ms,30000ms
+012-4,270,182,7,8|monster|Bat|1017,5,100000ms,30000ms
+012-4,322,141,17,22|monster|RedSlime|1008,20,100000ms,30000ms
+012-4,451,111,7,8|monster|Bat|1017,5,100000ms,30000ms
+012-4,422,50,11,32|monster|Spider|1012,10,100000ms,30000ms
+012-4,380,40,14,22|monster|Spider|1012,10,100000ms,30000ms
+012-4,124,49,9,24|monster|Terranite|1062,1,100000ms,30000ms
+012-4,80,110,9,5|monster|Bat|1017,5,100000ms,30000ms
+012-4,42,142,20,11|monster|Skeleton|1043,3,100000ms,30000ms
+012-4,41,159,11,20|monster|Spider|1012,20,100000ms,30000ms
+012-4,95,180,9,5|monster|Bat|1017,5,100000ms,30000ms
+012-4,91,180,23,10|monster|Spider|1012,20,100000ms,30000ms
diff --git a/world/map/npc/012-4/_nodes.txt b/world/map/npc/012-4/_nodes.txt
new file mode 100644
index 00000000..2c9229b2
--- /dev/null
+++ b/world/map/npc/012-4/_nodes.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Terranite Cave nodes
+
+// (no nodes)
diff --git a/world/map/npc/013-1/_import.txt b/world/map/npc/013-1/_import.txt
index 3a988151..5fca25f0 100644
--- a/world/map/npc/013-1/_import.txt
+++ b/world/map/npc/013-1/_import.txt
@@ -2,6 +2,7 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 013-1
npc: npc/013-1/_mobs.txt
+npc: npc/013-1/_nodes.txt
npc: npc/013-1/_warps.txt
npc: npc/013-1/flowerpentagram.txt
npc: npc/013-1/mapflags.txt
diff --git a/world/map/npc/013-1/_mobs.txt b/world/map/npc/013-1/_mobs.txt
index 7d2efa88..ca0b2b68 100644
--- a/world/map/npc/013-1/_mobs.txt
+++ b/world/map/npc/013-1/_mobs.txt
@@ -1,79 +1,18 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Woodland Hills mobs
-013-1,0,0,0,0|monster|PinkFlower|1014,13,0ms,100ms,Mob013-1::On1014
-013-1,0,0,0,0|monster|SpikyMushroom|1019,12,0ms,100ms,Mob013-1::On1019
-013-1,0,0,0,0|monster|Mouboo|1028,5,0ms,100ms,Mob013-1::On1028
-013-1,0,0,0,0|monster|MauvePlant|1029,1,270ms,180ms,Mob013-1::On1029
-013-1,0,0,0,0|monster|MauvePlant|1029,4,2700000ms,1800000ms,Mob013-1::On1029
-013-1,0,0,0,0|monster|CobaltPlant|1030,1,270ms,180ms,Mob013-1::On1030
-013-1,0,0,0,0|monster|CobaltPlant|1030,2,2700000ms,1800000ms,Mob013-1::On1030
-013-1,0,0,0,0|monster|GambogePlant|1031,1,270ms,180ms,Mob013-1::On1031
-013-1,0,0,0,0|monster|GambogePlant|1031,2,2700000ms,1800000ms,Mob013-1::On1031
-013-1,0,0,0,0|monster|AlizarinPlant|1032,1,270ms,180ms,Mob013-1::On1032
-013-1,0,0,0,0|monster|AlizarinPlant|1032,2,2700000ms,1800000ms,Mob013-1::On1032
-013-1,0,0,0,0|monster|Silkworm|1035,4,60000ms,30000ms,Mob013-1::On1035
-013-1,0,0,0,0|monster|CloverPatch|1037,2,0ms,1000ms,Mob013-1::On1037
-013-1,0,0,0,0|monster|Squirrel|1038,25,30ms,20ms,Mob013-1::On1038
-013-1,0,0,0,0|monster|Butterfly|1055,10,30ms,20ms,Mob013-1::On1055
-
-
-013-1,0,0,0|script|Mob013-1|32767
-{
- end;
-
-On1014:
- set @mobID, 1014;
- callfunc "MobPoints";
- end;
-
-On1019:
- set @mobID, 1019;
- callfunc "MobPoints";
- end;
-
-On1028:
- set @mobID, 1028;
- callfunc "MobPoints";
- end;
-
-On1029:
- set @mobID, 1029;
- callfunc "MobPoints";
- end;
-
-On1030:
- set @mobID, 1030;
- callfunc "MobPoints";
- end;
-
-On1031:
- set @mobID, 1031;
- callfunc "MobPoints";
- end;
-
-On1032:
- set @mobID, 1032;
- callfunc "MobPoints";
- end;
-
-On1035:
- set @mobID, 1035;
- callfunc "MobPoints";
- end;
-
-On1037:
- set @mobID, 1037;
- callfunc "MobPoints";
- end;
-
-On1038:
- set @mobID, 1038;
- callfunc "MobPoints";
- end;
-
-On1055:
- set @mobID, 1055;
- callfunc "MobPoints";
- end;
-}
+013-1,0,0,0,0|monster|PinkFlower|1014,13,0ms,100ms
+013-1,0,0,0,0|monster|SpikyMushroom|1019,12,0ms,100ms
+013-1,0,0,0,0|monster|Mouboo|1028,5,0ms,100ms
+013-1,0,0,0,0|monster|MauvePlant|1029,1,270ms,180ms
+013-1,0,0,0,0|monster|MauvePlant|1029,4,2700000ms,1800000ms
+013-1,0,0,0,0|monster|CobaltPlant|1030,1,270ms,180ms
+013-1,0,0,0,0|monster|CobaltPlant|1030,2,2700000ms,1800000ms
+013-1,0,0,0,0|monster|GambogePlant|1031,1,270ms,180ms
+013-1,0,0,0,0|monster|GambogePlant|1031,2,2700000ms,1800000ms
+013-1,0,0,0,0|monster|AlizarinPlant|1032,1,270ms,180ms
+013-1,0,0,0,0|monster|AlizarinPlant|1032,2,2700000ms,1800000ms
+013-1,0,0,0,0|monster|Silkworm|1035,4,60000ms,30000ms
+013-1,0,0,0,0|monster|CloverPatch|1037,2,0ms,1000ms
+013-1,0,0,0,0|monster|Squirrel|1038,25,30ms,20ms
+013-1,0,0,0,0|monster|Butterfly|1055,10,30ms,20ms
diff --git a/world/map/npc/013-1/_nodes.txt b/world/map/npc/013-1/_nodes.txt
new file mode 100644
index 00000000..13ee4f92
--- /dev/null
+++ b/world/map/npc/013-1/_nodes.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Woodland Hills nodes
+
+// (no nodes)
diff --git a/world/map/npc/013-1/sagatha.txt b/world/map/npc/013-1/sagatha.txt
index 558e9b70..e113d35a 100644
--- a/world/map/npc/013-1/sagatha.txt
+++ b/world/map/npc/013-1/sagatha.txt
@@ -267,7 +267,7 @@ L_teach_N14:
mes "\"Some forest creatures sometimes overgrow their fur or hide. That makes them uncomfortable.\"";
next;
mes "[Sagatha the Witch]";
- mes "\"You can help them with shearing magic. Press your hands together and say '" + getspellinvocation("shear") + "'. Then touch them with your hands, and brush off any excess.\"";
+ mes "\"You can help them with shearing magic. Press your hands together and say '" + get(.invocation$, "shear") + "'. Then touch them with your hands, and brush off any excess.\"";
next;
mes "[Sagatha the Witch]";
mes "\"The spell is strong, so you only need to do this once. Be careful not to cut them. Some things they shed are useful. Often they will leave them to you as a thank-you.\"";
@@ -280,7 +280,7 @@ L_teach_N10:
mes "\"Next, a nature spell. Take a cocoon shell. Hold it in your hand. Feel its lightness.\"";
next;
mes "[Sagatha the Witch]";
- mes "\"Now whisper '" + getspellinvocation("flying-backpack") + "', and if your backpack was pressing on you you should no longer feel it now.\"";
+ mes "\"Now whisper '" + get(.invocation$, "flying-backpack") + "', and if your backpack was pressing on you you should no longer feel it now.\"";
goto L_practice;
L_teach_A10:
@@ -290,14 +290,14 @@ L_teach_A10:
mes "\"To protect against others' magic, take a small mushroom from a shady place. Mushrooms draw things out of the earth. Rub your mushroom into pieces between your hands.\"";
next;
mes "[Sagatha the Witch]";
- mes "\"Then say '" + getspellinvocation("barrier") + "' and let the mushroom's power take over.\"";
+ mes "\"Then say '" + get(.invocation$, "magic barrier") + "' and let the mushroom's power take over.\"";
goto L_practice;
L_teach_A11:
if (@mexp < 200)
goto L_teach_noexp;
mes "[Sagatha the Witch]";
- mes "\"If you must fight, call allies. You can call spiky mushrooms out of the ground with a mushroom spike and a root. Hold up the spike and call out to them: '" + getspellinvocation("summon-spiky-mushrooms") + "'. Then press the root to the ground.\"";
+ mes "\"If you must fight, call allies. You can call spiky mushrooms out of the ground with a mushroom spike and a root. Hold up the spike and call out to them: '" + get(.invocation$, "smsmushrooms") + "'. Then press the root to the ground.\"";
next;
mes "[Sagatha the Witch]";
mes "\"Spiky mushrooms often grow too many spikes, so you can shear the spikes off of some.\"";
@@ -308,17 +308,17 @@ L_teach_A12:
if (@mexp < 220)
goto L_teach_noexp;
mes "[Sagatha the Witch]";
- mes "\"You can call fluffies, too. But for them you must call out '" + getspellinvocation("summon-fluffies") + "' instead, with white fluffy fur instead of a spike. And don't forget the root.\"";
+ mes "\"You can call fluffies, too. But for them you must call out '" + get(.invocation$, "smfluffies") + "' instead, with white fluffy fur instead of a spike. And don't forget the root.\"";
goto L_practice;
L_teach_N11:
if (@mexp < 250)
goto L_teach_noexp;
mes "[Sagatha the Witch]";
- mes "\"You can harden your skin with a hard spike. Hold it in your hands and speak '" + getspellinvocation("protect") + "', then draw its hardness into your skin.\"";
+ mes "\"You can harden your skin with a hard spike. Hold it in your hands and speak '" + get(.invocation$, "protect") + "', then draw its hardness into your skin.\"";
next;
mes "[Sagatha the Witch]";
- mes "\"Or call it into someone else's skin, by saying that someone's name right after the '" + getspellinvocation("protect") + "'.\"";
+ mes "\"Or call it into someone else's skin, by saying that someone's name right after the '" + get(.invocation$, "protect") + "'.\"";
goto L_practice;
L_teach_noexp:
diff --git a/world/map/npc/013-2/_import.txt b/world/map/npc/013-2/_import.txt
index 105a75a7..6dc243ad 100644
--- a/world/map/npc/013-2/_import.txt
+++ b/world/map/npc/013-2/_import.txt
@@ -2,6 +2,7 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 013-2
npc: npc/013-2/_mobs.txt
+npc: npc/013-2/_nodes.txt
npc: npc/013-2/_warps.txt
npc: npc/013-2/apprentice.txt
npc: npc/013-2/mapflags.txt
diff --git a/world/map/npc/013-2/_mobs.txt b/world/map/npc/013-2/_mobs.txt
index 82f242a0..b092afcc 100644
--- a/world/map/npc/013-2/_mobs.txt
+++ b/world/map/npc/013-2/_mobs.txt
@@ -1,9 +1,3 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Magic House mobs
-
-
-013-2,0,0,0|script|Mob013-2|32767
-{
- end;
-}
diff --git a/world/map/npc/013-2/_nodes.txt b/world/map/npc/013-2/_nodes.txt
new file mode 100644
index 00000000..80a032bc
--- /dev/null
+++ b/world/map/npc/013-2/_nodes.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Magic House nodes
+
+// (no nodes)
diff --git a/world/map/npc/013-2/wizard.txt b/world/map/npc/013-2/wizard.txt
index ced2865b..32a2a623 100644
--- a/world/map/npc/013-2/wizard.txt
+++ b/world/map/npc/013-2/wizard.txt
@@ -75,7 +75,7 @@ L_TeachSpell:
mes "\"This one may not seem too powerful, but it can be quite handy; it's the 'hide' spell. It will shield you from some forms of detection magic.\"";
next;
mes "[Old Wizard]";
- mes "\"Put a piece of cotton cloth on your head, and speak out '" + getspellinvocation("hide") + "', loudly and clearly. The protection lasts quite long, but you may have to renew it on occasion.\"";
+ mes "\"Put a piece of cotton cloth on your head, and speak out '" + get(.invocation$, "spell-hide") + "', loudly and clearly. The protection lasts quite long, but you may have to renew it on occasion.\"";
next;
mes "[Old Wizard]";
mes "\"You can also cast it on others, of course. Just speak their name after you pronounce the invocation.\"";
diff --git a/world/map/npc/013-3/_import.txt b/world/map/npc/013-3/_import.txt
index b4ca98df..4a6fd517 100644
--- a/world/map/npc/013-3/_import.txt
+++ b/world/map/npc/013-3/_import.txt
@@ -2,6 +2,7 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 013-3
npc: npc/013-3/_mobs.txt
+npc: npc/013-3/_nodes.txt
npc: npc/013-3/_warps.txt
npc: npc/013-3/barrier.txt
npc: npc/013-3/mapflags.txt
diff --git a/world/map/npc/013-3/_mobs.txt b/world/map/npc/013-3/_mobs.txt
index 088e2c72..b1456bc5 100644
--- a/world/map/npc/013-3/_mobs.txt
+++ b/world/map/npc/013-3/_mobs.txt
@@ -1,82 +1,31 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Woodland Hills Cave mobs
-013-3,28,89,16,52|monster|CaveSnake|1021,10,120000ms,60000ms,Mob013-3::On1021
-013-3,61,22,2,2|monster|FireSkull|1023,1,120000ms,60000ms,Mob013-3::On1023
-013-3,81,22,2,2|monster|PoisonSkull|1024,1,120000ms,60000ms,Mob013-3::On1024
-013-3,109,31,6,22|monster|BlackScorpion|1009,20,50000ms,25000ms,Mob013-3::On1009
-013-3,119,84,27,38|monster|Spider|1012,20,120000ms,40000ms,Mob013-3::On1012
-013-3,176,23,5,6|monster|Spider|1012,10,100000ms,40000ms,Mob013-3::On1012
-013-3,82,75,2,2|monster|FireSkull|1023,1,180000ms,60000ms,Mob013-3::On1023
-013-3,142,37,2,2|monster|PoisonSkull|1024,1,180000ms,60000ms,Mob013-3::On1024
-013-3,79,134,21,16|monster|BlackScorpion|1009,5,80000ms,40000ms,Mob013-3::On1009
-013-3,71,169,38,17|monster|BlackScorpion|1009,5,80000ms,40000ms,Mob013-3::On1009
-013-3,64,85,9,21|monster|BlackScorpion|1009,10,80000ms,40000ms,Mob013-3::On1009
-013-3,81,92,3,20|monster|BlackScorpion|1009,10,80000ms,40000ms,Mob013-3::On1009
-013-3,163,84,33,37|monster|Snake|1010,30,120000ms,50000ms,Mob013-3::On1010
-013-3,162,85,33,37|monster|Spider|1012,30,120000ms,50000ms,Mob013-3::On1012
-013-3,172,77,18,25|monster|BlackScorpion|1009,15,120000ms,50000ms,Mob013-3::On1009
-013-3,145,36,20,15|monster|RedSlime|1008,25,80000ms,40000ms,Mob013-3::On1008
-013-3,167,37,23,11|monster|Snake|1010,20,120000ms,40000ms,Mob013-3::On1010
-013-3,165,25,16,11|monster|BlackScorpion|1009,15,120000ms,40000ms,Mob013-3::On1009
-013-3,71,39,2,3|monster|Snake|1010,2,40000ms,20000ms,Mob013-3::On1010
-013-3,159,102,3,5|monster|YellowSlime|1007,2,80000ms,40000ms,Mob013-3::On1007
-013-3,67,22,2,2|monster|Maggot|1002,2,40000ms,20000ms,Mob013-3::On1002
-013-3,75,22,2,2|monster|Maggot|1002,2,40000ms,20000ms,Mob013-3::On1002
-013-3,76,39,7,4|monster|BlackScorpion|1009,8,40000ms,20000ms,Mob013-3::On1009
-013-3,65,39,7,4|monster|RedSlime|1008,8,40000ms,20000ms,Mob013-3::On1008
-013-3,62,33,2,1|monster|PoisonSkull|1024,1,120000ms,60000ms,Mob013-3::On1024
-013-3,80,33,2,1|monster|FireSkull|1023,1,120000ms,60000ms,Mob013-3::On1023
-013-3,75,46,2,1|monster|PoisonSkull|1024,1,120000ms,60000ms,Mob013-3::On1024
-013-3,67,46,2,1|monster|FireSkull|1023,1,120000ms,60000ms,Mob013-3::On1023
-
-
-013-3,0,0,0|script|Mob013-3|32767
-{
- end;
-
-On1002:
- set @mobID, 1002;
- callfunc "MobPoints";
- end;
-
-On1007:
- set @mobID, 1007;
- callfunc "MobPoints";
- end;
-
-On1008:
- set @mobID, 1008;
- callfunc "MobPoints";
- end;
-
-On1009:
- set @mobID, 1009;
- callfunc "MobPoints";
- end;
-
-On1010:
- set @mobID, 1010;
- callfunc "MobPoints";
- end;
-
-On1012:
- set @mobID, 1012;
- callfunc "MobPoints";
- end;
-
-On1021:
- set @mobID, 1021;
- callfunc "MobPoints";
- end;
-
-On1023:
- set @mobID, 1023;
- callfunc "MobPoints";
- end;
-
-On1024:
- set @mobID, 1024;
- callfunc "MobPoints";
- end;
-}
+013-3,28,89,16,52|monster|CaveSnake|1021,10,120000ms,60000ms
+013-3,61,22,2,2|monster|FireSkull|1023,1,120000ms,60000ms
+013-3,81,22,2,2|monster|PoisonSkull|1024,1,120000ms,60000ms
+013-3,109,31,6,22|monster|BlackScorpion|1009,20,50000ms,25000ms
+013-3,119,84,27,38|monster|Spider|1012,20,120000ms,40000ms
+013-3,176,23,5,6|monster|Spider|1012,10,100000ms,40000ms
+013-3,82,75,2,2|monster|FireSkull|1023,1,180000ms,60000ms
+013-3,142,37,2,2|monster|PoisonSkull|1024,1,180000ms,60000ms
+013-3,79,134,21,16|monster|BlackScorpion|1009,5,80000ms,40000ms
+013-3,71,169,38,17|monster|BlackScorpion|1009,5,80000ms,40000ms
+013-3,64,85,9,21|monster|BlackScorpion|1009,10,80000ms,40000ms
+013-3,81,92,3,20|monster|BlackScorpion|1009,10,80000ms,40000ms
+013-3,163,84,33,37|monster|Snake|1010,30,120000ms,50000ms
+013-3,162,85,33,37|monster|Spider|1012,30,120000ms,50000ms
+013-3,172,77,18,25|monster|BlackScorpion|1009,15,120000ms,50000ms
+013-3,145,36,20,15|monster|RedSlime|1008,25,80000ms,40000ms
+013-3,167,37,23,11|monster|Snake|1010,20,120000ms,40000ms
+013-3,165,25,16,11|monster|BlackScorpion|1009,15,120000ms,40000ms
+013-3,71,39,2,3|monster|Snake|1010,2,40000ms,20000ms
+013-3,159,102,3,5|monster|YellowSlime|1007,2,80000ms,40000ms
+013-3,67,22,2,2|monster|Maggot|1002,2,40000ms,20000ms
+013-3,75,22,2,2|monster|Maggot|1002,2,40000ms,20000ms
+013-3,76,39,7,4|monster|BlackScorpion|1009,8,40000ms,20000ms
+013-3,65,39,7,4|monster|RedSlime|1008,8,40000ms,20000ms
+013-3,62,33,2,1|monster|PoisonSkull|1024,1,120000ms,60000ms
+013-3,80,33,2,1|monster|FireSkull|1023,1,120000ms,60000ms
+013-3,75,46,2,1|monster|PoisonSkull|1024,1,120000ms,60000ms
+013-3,67,46,2,1|monster|FireSkull|1023,1,120000ms,60000ms
diff --git a/world/map/npc/013-3/_nodes.txt b/world/map/npc/013-3/_nodes.txt
new file mode 100644
index 00000000..689be5d9
--- /dev/null
+++ b/world/map/npc/013-3/_nodes.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Woodland Hills Cave nodes
+
+// (no nodes)
diff --git a/world/map/npc/014-1/_import.txt b/world/map/npc/014-1/_import.txt
index 9990bdf0..cde43724 100644
--- a/world/map/npc/014-1/_import.txt
+++ b/world/map/npc/014-1/_import.txt
@@ -2,6 +2,7 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 014-1
npc: npc/014-1/_mobs.txt
+npc: npc/014-1/_nodes.txt
npc: npc/014-1/_warps.txt
npc: npc/014-1/mapflags.txt
npc: npc/014-1/wedding-officiator.txt
diff --git a/world/map/npc/014-1/_mobs.txt b/world/map/npc/014-1/_mobs.txt
index 862d1c19..8abab0ea 100644
--- a/world/map/npc/014-1/_mobs.txt
+++ b/world/map/npc/014-1/_mobs.txt
@@ -1,85 +1,19 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Woodland mobs
-014-1,0,0,0,0|monster|EvilMushroom|1013,20,0ms,0ms,Mob014-1::On1013
-014-1,0,0,0,0|monster|PinkFlower|1014,25,0ms,0ms,Mob014-1::On1014
-014-1,0,0,0,0|monster|SpikyMushroom|1019,15,0ms,0ms,Mob014-1::On1019
-014-1,0,0,0,0|monster|Mouboo|1028,5,0ms,10ms,Mob014-1::On1028
-014-1,0,0,0,0|monster|MauvePlant|1029,1,270ms,180ms,Mob014-1::On1029
-014-1,0,0,0,0|monster|MauvePlant|1029,5,2700000ms,1800000ms,Mob014-1::On1029
-014-1,0,0,0,0|monster|CobaltPlant|1030,1,270ms,180ms,Mob014-1::On1030
-014-1,0,0,0,0|monster|CobaltPlant|1030,2,2700000ms,1800000ms,Mob014-1::On1030
-014-1,0,0,0,0|monster|GambogePlant|1031,1,270ms,180ms,Mob014-1::On1031
-014-1,0,0,0,0|monster|GambogePlant|1031,2,2700000ms,1800000ms,Mob014-1::On1031
-014-1,0,0,0,0|monster|AlizarinPlant|1032,1,270ms,180ms,Mob014-1::On1032
-014-1,0,0,0,0|monster|AlizarinPlant|1032,2,2700000ms,1800000ms,Mob014-1::On1032
-014-1,0,0,0,0|monster|Silkworm|1035,4,6000ms,3000ms,Mob014-1::On1035
-014-1,0,0,0,0|monster|CloverPatch|1037,2,0ms,1000ms,Mob014-1::On1037
-014-1,0,0,0,0|monster|Squirrel|1038,25,30ms,20ms,Mob014-1::On1038
-014-1,0,0,0,0|monster|Butterfly|1055,10,30ms,20ms,Mob014-1::On1055
-
-
-014-1,0,0,0|script|Mob014-1|32767
-{
- end;
-
-On1013:
- set @mobID, 1013;
- callfunc "MobPoints";
- end;
-
-On1014:
- set @mobID, 1014;
- callfunc "MobPoints";
- end;
-
-On1019:
- set @mobID, 1019;
- callfunc "MobPoints";
- end;
-
-On1028:
- set @mobID, 1028;
- callfunc "MobPoints";
- end;
-
-On1029:
- set @mobID, 1029;
- callfunc "MobPoints";
- end;
-
-On1030:
- set @mobID, 1030;
- callfunc "MobPoints";
- end;
-
-On1031:
- set @mobID, 1031;
- callfunc "MobPoints";
- end;
-
-On1032:
- set @mobID, 1032;
- callfunc "MobPoints";
- end;
-
-On1035:
- set @mobID, 1035;
- callfunc "MobPoints";
- end;
-
-On1037:
- set @mobID, 1037;
- callfunc "MobPoints";
- end;
-
-On1038:
- set @mobID, 1038;
- callfunc "MobPoints";
- end;
-
-On1055:
- set @mobID, 1055;
- callfunc "MobPoints";
- end;
-}
+014-1,0,0,0,0|monster|EvilMushroom|1013,20,0ms,0ms
+014-1,0,0,0,0|monster|PinkFlower|1014,25,0ms,0ms
+014-1,0,0,0,0|monster|SpikyMushroom|1019,15,0ms,0ms
+014-1,0,0,0,0|monster|Mouboo|1028,5,0ms,10ms
+014-1,0,0,0,0|monster|MauvePlant|1029,1,270ms,180ms
+014-1,0,0,0,0|monster|MauvePlant|1029,5,2700000ms,1800000ms
+014-1,0,0,0,0|monster|CobaltPlant|1030,1,270ms,180ms
+014-1,0,0,0,0|monster|CobaltPlant|1030,2,2700000ms,1800000ms
+014-1,0,0,0,0|monster|GambogePlant|1031,1,270ms,180ms
+014-1,0,0,0,0|monster|GambogePlant|1031,2,2700000ms,1800000ms
+014-1,0,0,0,0|monster|AlizarinPlant|1032,1,270ms,180ms
+014-1,0,0,0,0|monster|AlizarinPlant|1032,2,2700000ms,1800000ms
+014-1,0,0,0,0|monster|Silkworm|1035,4,6000ms,3000ms
+014-1,0,0,0,0|monster|CloverPatch|1037,2,0ms,1000ms
+014-1,0,0,0,0|monster|Squirrel|1038,25,30ms,20ms
+014-1,0,0,0,0|monster|Butterfly|1055,10,30ms,20ms
diff --git a/world/map/npc/014-1/_nodes.txt b/world/map/npc/014-1/_nodes.txt
new file mode 100644
index 00000000..12c08221
--- /dev/null
+++ b/world/map/npc/014-1/_nodes.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Woodland nodes
+
+// (no nodes)
diff --git a/world/map/npc/014-1/wedding-officiator.txt b/world/map/npc/014-1/wedding-officiator.txt
index fc237082..dfdab00b 100644
--- a/world/map/npc/014-1/wedding-officiator.txt
+++ b/world/map/npc/014-1/wedding-officiator.txt
@@ -9,7 +9,7 @@
goto L_main;
L_main:
- if (getpartnerid2())
+ if (PARTNER)
goto L_main_married;
menu
@@ -35,10 +35,10 @@ L_explain_marriage:
mes "\"Both you and your partner must be at least " + WEDDING_MIN_LEVEL + " levels of age, though; the law is very firm on that. But if all of that works out, I will give you two wedding rings for the ceremony.\"";
next;
mes "[Wedding Officiator]";
- mes "\"To complete the marriage, each of you has to put on one of these rings, and you have to stand next to each other in the southern part of this park. Then one of you says `marry' and then the other person's name.\"";
+ mes "\"To complete the marriage, each of you has to put on one of these rings, and you have to stand next to each other in the southern part of this park. Then one of you says `#marry' and then the other person's name.\"";
next;
mes "[Wedding Officiator]";
- mes "\"So if you would want to marry me, for example, you would say `marry Wendy'. Just like that. Your partner then has to decide whether he or she wants that. And if you both agree, then you're married!\"";
+ mes "\"So if you would want to marry me, for example, you would say `#marry Wendy'. Just like that. Your partner then has to decide whether he or she wants that. And if you both agree, then you're married!\"";
mes "She again smiles that broad smile of hers.";
next;
goto L_main;
@@ -135,7 +135,7 @@ L_too_poor:
L_main_married:
mes "[Wedding Officiator]";
- mes "\"I hope that you and your partner are doing well?\"";
+ mes "\"I hope that you and "+ strcharinfo(0, get(BL_ID, PARTNER)) +" are doing well?\"";
next;
menu
"We are very happy, thanks for asking!", L_farewell,
@@ -219,8 +219,8 @@ L_divorce_nomoney:
L_do_divorce:
if (Zeny < @divorce_cost)
goto L_divorce_nomoney;
- if (divorce())
- goto L_DidDivorce;
+ set PARTNER, 0, PARTNER; // divorce the partner first, which will also divorce the rid if succesful
+ if (PARTNER < 1) goto L_DidDivorce;
mes "[Wedding Officiator]";
mes "The officiator searches through her records for your partner.";
diff --git a/world/map/npc/014-3/_import.txt b/world/map/npc/014-3/_import.txt
index 25c551bd..8aedea2e 100644
--- a/world/map/npc/014-3/_import.txt
+++ b/world/map/npc/014-3/_import.txt
@@ -2,5 +2,6 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 014-3
npc: npc/014-3/_mobs.txt
+npc: npc/014-3/_nodes.txt
npc: npc/014-3/_warps.txt
npc: npc/014-3/mapflags.txt
diff --git a/world/map/npc/014-3/_mobs.txt b/world/map/npc/014-3/_mobs.txt
index ebadbf58..90d835c2 100644
--- a/world/map/npc/014-3/_mobs.txt
+++ b/world/map/npc/014-3/_mobs.txt
@@ -1,15 +1,4 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Woodland Cave mobs
-014-3,0,0,0,0|monster|Bat|1017,50,0ms,0ms,Mob014-3::On1017
-
-
-014-3,0,0,0|script|Mob014-3|32767
-{
- end;
-
-On1017:
- set @mobID, 1017;
- callfunc "MobPoints";
- end;
-}
+014-3,0,0,0,0|monster|Bat|1017,50,0ms,0ms
diff --git a/world/map/npc/014-3/_nodes.txt b/world/map/npc/014-3/_nodes.txt
new file mode 100644
index 00000000..2ebc3af1
--- /dev/null
+++ b/world/map/npc/014-3/_nodes.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Woodland Cave nodes
+
+// (no nodes)
diff --git a/world/map/npc/015-1/_import.txt b/world/map/npc/015-1/_import.txt
index 6085f2a3..a376d93a 100644
--- a/world/map/npc/015-1/_import.txt
+++ b/world/map/npc/015-1/_import.txt
@@ -2,6 +2,7 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 015-1
npc: npc/015-1/_mobs.txt
+npc: npc/015-1/_nodes.txt
npc: npc/015-1/_warps.txt
npc: npc/015-1/alice.txt
npc: npc/015-1/barrier.txt
diff --git a/world/map/npc/015-1/_mobs.txt b/world/map/npc/015-1/_mobs.txt
index cad191f2..e012a95c 100644
--- a/world/map/npc/015-1/_mobs.txt
+++ b/world/map/npc/015-1/_mobs.txt
@@ -1,69 +1,13 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Woodland mobs
-015-1,0,0,0,0|monster|CloverPatch|1037,2,100000ms,1000ms,Mob015-1::On1037
-015-1,0,0,0,0|monster|Butterfly|1055,10,30ms,20ms,Mob015-1::On1055
-015-1,0,0,0,0|monster|Squirrel|1038,30,20ms,10ms,Mob015-1::On1038
-015-1,0,0,0,0|monster|LogHead|1025,40,0ms,0ms,Mob015-1::On1025
-015-1,0,0,0,0|monster|SpikyMushroom|1019,20,0ms,0ms,Mob015-1::On1019
-015-1,0,0,0,0|monster|PinkFlower|1014,20,0ms,0ms,Mob015-1::On1014
-015-1,0,0,0,0|monster|GambogePlant|1031,5,0ms,0ms,Mob015-1::On1031
-015-1,0,0,0,0|monster|AlizarinPlant|1032,5,0ms,0ms,Mob015-1::On1032
-015-1,0,0,0,0|monster|Silkworm|1035,7,15000ms,7000ms,Mob015-1::On1035
-015-1,0,0,0,0|monster|MauvePlant|1029,4,270000ms,180000ms,Mob015-1::On1029
-
-
-015-1,0,0,0|script|Mob015-1|32767
-{
- end;
-
-On1014:
- set @mobID, 1014;
- callfunc "MobPoints";
- end;
-
-On1019:
- set @mobID, 1019;
- callfunc "MobPoints";
- end;
-
-On1025:
- set @mobID, 1025;
- callfunc "MobPoints";
- end;
-
-On1029:
- set @mobID, 1029;
- callfunc "MobPoints";
- end;
-
-On1031:
- set @mobID, 1031;
- callfunc "MobPoints";
- end;
-
-On1032:
- set @mobID, 1032;
- callfunc "MobPoints";
- end;
-
-On1035:
- set @mobID, 1035;
- callfunc "MobPoints";
- end;
-
-On1037:
- set @mobID, 1037;
- callfunc "MobPoints";
- end;
-
-On1038:
- set @mobID, 1038;
- callfunc "MobPoints";
- end;
-
-On1055:
- set @mobID, 1055;
- callfunc "MobPoints";
- end;
-}
+015-1,0,0,0,0|monster|CloverPatch|1037,2,100000ms,1000ms
+015-1,0,0,0,0|monster|Butterfly|1055,10,30ms,20ms
+015-1,0,0,0,0|monster|Squirrel|1038,30,20ms,10ms
+015-1,0,0,0,0|monster|LogHead|1025,40,0ms,0ms
+015-1,0,0,0,0|monster|SpikyMushroom|1019,20,0ms,0ms
+015-1,0,0,0,0|monster|PinkFlower|1014,20,0ms,0ms
+015-1,0,0,0,0|monster|GambogePlant|1031,5,0ms,0ms
+015-1,0,0,0,0|monster|AlizarinPlant|1032,5,0ms,0ms
+015-1,0,0,0,0|monster|Silkworm|1035,7,15000ms,7000ms
+015-1,0,0,0,0|monster|MauvePlant|1029,4,270000ms,180000ms
diff --git a/world/map/npc/015-1/_nodes.txt b/world/map/npc/015-1/_nodes.txt
new file mode 100644
index 00000000..12c08221
--- /dev/null
+++ b/world/map/npc/015-1/_nodes.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Woodland nodes
+
+// (no nodes)
diff --git a/world/map/npc/015-1/sword.txt b/world/map/npc/015-1/sword.txt
index 239de752..be23e23a 100644
--- a/world/map/npc/015-1/sword.txt
+++ b/world/map/npc/015-1/sword.txt
@@ -109,7 +109,7 @@ L_Initial_ok:
mes "\"Oh, my apologies – that was a little overly dramatic. But I do not get to talk to thy kin anymore all that often.\"";
next;
mes "[Mystic Sword]";
- mes "\"For the flare dart spell throw a handful of sulphur powder up into the air, and say, '" + getspellinvocation("flare-dart") + "'.\"";
+ mes "\"For the flare dart spell throw a handful of sulphur powder up into the air, and say, '" + get(.invocation$, "flare-dart") + "'.\"";
set @Q_status, @STATUS_LEARNED_FLAREDART;
callsub S_update_var;
next;
@@ -257,7 +257,7 @@ L_Next3:
callsub S_update_var;
next;
mes "[Mystic Sword]";
- mes "\"Speak '" + getspellinvocation("magic-knuckles") + "' and take a glass of beer and drink it, without ever taking it off thy lips. This will harden and enchant thy fists, turning them into powerful weapons.\"";
+ mes "\"Speak '" + get(.invocation$, "magic-knuckles") + "' and take a glass of beer and drink it, without ever taking it off thy lips. This will harden and enchant thy fists, turning them into powerful weapons.\"";
close;
L_L2_almost_done:
@@ -297,7 +297,7 @@ L_Next4:
callsub S_update_var;
next;
mes "[Mystic Sword]";
- mes "\"This powder thou shalst need to cast the lightning spell. Throw it up into the air and shout '" + getspellinvocation("lightning-strike") + "', and smite thine enemies with lightning.\"";
+ mes "\"This powder thou shalst need to cast the lightning spell. Throw it up into the air and shout '" + get(.invocation$, "lightning-strike") + "', and smite thine enemies with lightning.\"";
next;
goto L_Farewell;
diff --git a/world/map/npc/015-3/_import.txt b/world/map/npc/015-3/_import.txt
index c0f4fc4f..d1b95191 100644
--- a/world/map/npc/015-3/_import.txt
+++ b/world/map/npc/015-3/_import.txt
@@ -2,6 +2,7 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 015-3
npc: npc/015-3/_mobs.txt
+npc: npc/015-3/_nodes.txt
npc: npc/015-3/_warps.txt
npc: npc/015-3/barrier.txt
npc: npc/015-3/katze.txt
diff --git a/world/map/npc/015-3/_mobs.txt b/world/map/npc/015-3/_mobs.txt
index 1b205735..faab0b97 100644
--- a/world/map/npc/015-3/_mobs.txt
+++ b/world/map/npc/015-3/_mobs.txt
@@ -1,28 +1,7 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Cat's Cave mobs
-015-3,22,25,2,4|monster|Bat|1017,2,100000ms,30000ms,Mob015-3::On1017
-015-3,29,31,2,2|monster|Maggot|1002,2,100000ms,30000ms,Mob015-3::On1002
-015-3,23,19,1,1|monster|Maggot|1002,1,100000ms,30000ms,Mob015-3::On1002
-015-3,40,19,1,1|monster|Spider|1012,1,100000ms,30000ms,Mob015-3::On1012
-
-
-015-3,0,0,0|script|Mob015-3|32767
-{
- end;
-
-On1002:
- set @mobID, 1002;
- callfunc "MobPoints";
- end;
-
-On1012:
- set @mobID, 1012;
- callfunc "MobPoints";
- end;
-
-On1017:
- set @mobID, 1017;
- callfunc "MobPoints";
- end;
-}
+015-3,22,25,2,4|monster|Bat|1017,2,100000ms,30000ms
+015-3,29,31,2,2|monster|Maggot|1002,2,100000ms,30000ms
+015-3,23,19,1,1|monster|Maggot|1002,1,100000ms,30000ms
+015-3,40,19,1,1|monster|Spider|1012,1,100000ms,30000ms
diff --git a/world/map/npc/015-3/_nodes.txt b/world/map/npc/015-3/_nodes.txt
new file mode 100644
index 00000000..e37c6a3c
--- /dev/null
+++ b/world/map/npc/015-3/_nodes.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Cat's Cave nodes
+
+// (no nodes)
diff --git a/world/map/npc/016-1/_import.txt b/world/map/npc/016-1/_import.txt
index e67bcb01..63751660 100644
--- a/world/map/npc/016-1/_import.txt
+++ b/world/map/npc/016-1/_import.txt
@@ -2,6 +2,7 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 016-1
npc: npc/016-1/_mobs.txt
+npc: npc/016-1/_nodes.txt
npc: npc/016-1/_warps.txt
npc: npc/016-1/gwendolyn.txt
npc: npc/016-1/mapflags.txt
diff --git a/world/map/npc/016-1/_mobs.txt b/world/map/npc/016-1/_mobs.txt
index 58b33a9d..91c4d96c 100644
--- a/world/map/npc/016-1/_mobs.txt
+++ b/world/map/npc/016-1/_mobs.txt
@@ -1,59 +1,13 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Woodland mobs
-016-1,0,0,0,0|monster|CloverPatch|1037,2,100000ms,30000ms,Mob016-1::On1037
-016-1,0,0,0,0|monster|Butterfly|1055,10,30ms,20ms,Mob016-1::On1055
-016-1,0,0,0,0|monster|Squirrel|1038,30,20ms,10ms,Mob016-1::On1038
-016-1,0,0,0,0|monster|Mouboo|1028,5,0ms,0ms,Mob016-1::On1028
-016-1,0,0,0,0|monster|Scorpion|1003,15,0ms,0ms,Mob016-1::On1003
-016-1,0,0,0,0|monster|MauvePlant|1029,3,0ms,0ms,Mob016-1::On1029
-016-1,0,0,0,0|monster|MauvePlant|1029,4,270000ms,180000ms,Mob016-1::On1029
-016-1,0,0,0,0|monster|CobaltPlant|1030,3,0ms,0ms,Mob016-1::On1030
-016-1,0,0,0,0|monster|MauvePlant|1029,4,270000ms,180000ms,Mob016-1::On1029
-016-1,0,0,0,0|monster|Silkworm|1035,7,150000ms,7000ms,Mob016-1::On1035
-
-
-016-1,0,0,0|script|Mob016-1|32767
-{
- end;
-
-On1003:
- set @mobID, 1003;
- callfunc "MobPoints";
- end;
-
-On1028:
- set @mobID, 1028;
- callfunc "MobPoints";
- end;
-
-On1029:
- set @mobID, 1029;
- callfunc "MobPoints";
- end;
-
-On1030:
- set @mobID, 1030;
- callfunc "MobPoints";
- end;
-
-On1035:
- set @mobID, 1035;
- callfunc "MobPoints";
- end;
-
-On1037:
- set @mobID, 1037;
- callfunc "MobPoints";
- end;
-
-On1038:
- set @mobID, 1038;
- callfunc "MobPoints";
- end;
-
-On1055:
- set @mobID, 1055;
- callfunc "MobPoints";
- end;
-}
+016-1,0,0,0,0|monster|CloverPatch|1037,2,100000ms,30000ms
+016-1,0,0,0,0|monster|Butterfly|1055,10,30ms,20ms
+016-1,0,0,0,0|monster|Squirrel|1038,30,20ms,10ms
+016-1,0,0,0,0|monster|Mouboo|1028,5,0ms,0ms
+016-1,0,0,0,0|monster|Scorpion|1003,15,0ms,0ms
+016-1,0,0,0,0|monster|MauvePlant|1029,3,0ms,0ms
+016-1,0,0,0,0|monster|MauvePlant|1029,4,270000ms,180000ms
+016-1,0,0,0,0|monster|CobaltPlant|1030,3,0ms,0ms
+016-1,0,0,0,0|monster|MauvePlant|1029,4,270000ms,180000ms
+016-1,0,0,0,0|monster|Silkworm|1035,7,150000ms,7000ms
diff --git a/world/map/npc/016-1/_nodes.txt b/world/map/npc/016-1/_nodes.txt
new file mode 100644
index 00000000..12c08221
--- /dev/null
+++ b/world/map/npc/016-1/_nodes.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Woodland nodes
+
+// (no nodes)
diff --git a/world/map/npc/017-1/_import.txt b/world/map/npc/017-1/_import.txt
index ecf2c383..a8bc80c9 100644
--- a/world/map/npc/017-1/_import.txt
+++ b/world/map/npc/017-1/_import.txt
@@ -2,6 +2,7 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 017-1
npc: npc/017-1/_mobs.txt
+npc: npc/017-1/_nodes.txt
npc: npc/017-1/_warps.txt
npc: npc/017-1/flowerpentagram1.txt
npc: npc/017-1/flowerpentagram5.txt
diff --git a/world/map/npc/017-1/_mobs.txt b/world/map/npc/017-1/_mobs.txt
index fe1c40b4..d4e5955a 100644
--- a/world/map/npc/017-1/_mobs.txt
+++ b/world/map/npc/017-1/_mobs.txt
@@ -1,102 +1,21 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Woodland Hills mobs
-017-1,0,0,0,0|monster|CloverPatch|1037,2,0ms,1000ms,Mob017-1::On1037
-017-1,99,30,2,1|monster|CloverPatch|1037,1,150000ms,50000ms,Mob017-1::On1037
-017-1,29,29,19,12|monster|GambogePlant|1031,1,0ms,25000ms,Mob017-1::On1031
-017-1,91,25,76,8|monster|LogHead|1025,3,5000ms,60000ms,Mob017-1::On1025
-017-1,31,48,19,12|monster|LogHead|1025,3,5000ms,60000ms,Mob017-1::On1025
-017-1,0,0,0,0|monster|Butterfly|1055,10,30ms,20ms,Mob017-1::On1055
-017-1,0,0,0,0|monster|Bat|1017,5,0ms,0ms,Mob017-1::On1017
-017-1,0,0,0,0|monster|FireGoblin|1011,5,0ms,0ms,Mob017-1::On1011
-017-1,0,0,0,0|monster|Mouboo|1028,5,0ms,0ms,Mob017-1::On1028
-017-1,0,0,0,0|monster|PinkFlower|1014,5,0ms,0ms,Mob017-1::On1014
-017-1,0,0,0,0|monster|SpikyMushroom|1019,5,0ms,0ms,Mob017-1::On1019
-017-1,0,0,0,0|monster|EvilMushroom|1013,10,0ms,0ms,Mob017-1::On1013
-017-1,0,0,0,0|monster|AlizarinPlant|1032,3,0ms,0ms,Mob017-1::On1032
-017-1,0,0,0,0|monster|GambogePlant|1031,3,0ms,0ms,Mob017-1::On1031
-017-1,0,0,0,0|monster|CobaltPlant|1030,3,0ms,0ms,Mob017-1::On1030
-017-1,0,0,0,0|monster|MauvePlant|1029,5,0ms,0ms,Mob017-1::On1029
-017-1,0,0,0,0|monster|Silkworm|1035,10,0ms,0ms,Mob017-1::On1035
-017-1,0,0,0,0|monster|Squirrel|1038,30,20ms,10ms,Mob017-1::On1038
-
-
-017-1,0,0,0|script|Mob017-1|32767
-{
- end;
-
-On1011:
- set @mobID, 1011;
- callfunc "MobPoints";
- end;
-
-On1013:
- set @mobID, 1013;
- callfunc "MobPoints";
- end;
-
-On1014:
- set @mobID, 1014;
- callfunc "MobPoints";
- end;
-
-On1017:
- set @mobID, 1017;
- callfunc "MobPoints";
- end;
-
-On1019:
- set @mobID, 1019;
- callfunc "MobPoints";
- end;
-
-On1025:
- set @mobID, 1025;
- callfunc "MobPoints";
- end;
-
-On1028:
- set @mobID, 1028;
- callfunc "MobPoints";
- end;
-
-On1029:
- set @mobID, 1029;
- callfunc "MobPoints";
- end;
-
-On1030:
- set @mobID, 1030;
- callfunc "MobPoints";
- end;
-
-On1031:
- set @mobID, 1031;
- callfunc "MobPoints";
- end;
-
-On1032:
- set @mobID, 1032;
- callfunc "MobPoints";
- end;
-
-On1035:
- set @mobID, 1035;
- callfunc "MobPoints";
- end;
-
-On1037:
- set @mobID, 1037;
- callfunc "MobPoints";
- end;
-
-On1038:
- set @mobID, 1038;
- callfunc "MobPoints";
- end;
-
-On1055:
- set @mobID, 1055;
- callfunc "MobPoints";
- end;
-}
+017-1,0,0,0,0|monster|CloverPatch|1037,2,0ms,1000ms
+017-1,99,30,2,1|monster|CloverPatch|1037,1,150000ms,50000ms
+017-1,29,29,19,12|monster|GambogePlant|1031,1,0ms,25000ms
+017-1,91,25,76,8|monster|LogHead|1025,3,5000ms,60000ms
+017-1,31,48,19,12|monster|LogHead|1025,3,5000ms,60000ms
+017-1,0,0,0,0|monster|Butterfly|1055,10,30ms,20ms
+017-1,0,0,0,0|monster|Bat|1017,5,0ms,0ms
+017-1,0,0,0,0|monster|FireGoblin|1011,5,0ms,0ms
+017-1,0,0,0,0|monster|Mouboo|1028,5,0ms,0ms
+017-1,0,0,0,0|monster|PinkFlower|1014,5,0ms,0ms
+017-1,0,0,0,0|monster|SpikyMushroom|1019,5,0ms,0ms
+017-1,0,0,0,0|monster|EvilMushroom|1013,10,0ms,0ms
+017-1,0,0,0,0|monster|AlizarinPlant|1032,3,0ms,0ms
+017-1,0,0,0,0|monster|GambogePlant|1031,3,0ms,0ms
+017-1,0,0,0,0|monster|CobaltPlant|1030,3,0ms,0ms
+017-1,0,0,0,0|monster|MauvePlant|1029,5,0ms,0ms
+017-1,0,0,0,0|monster|Silkworm|1035,10,0ms,0ms
+017-1,0,0,0,0|monster|Squirrel|1038,30,20ms,10ms
diff --git a/world/map/npc/017-1/_nodes.txt b/world/map/npc/017-1/_nodes.txt
new file mode 100644
index 00000000..13ee4f92
--- /dev/null
+++ b/world/map/npc/017-1/_nodes.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Woodland Hills nodes
+
+// (no nodes)
diff --git a/world/map/npc/017-2/_import.txt b/world/map/npc/017-2/_import.txt
index 8f13a370..84618771 100644
--- a/world/map/npc/017-2/_import.txt
+++ b/world/map/npc/017-2/_import.txt
@@ -2,5 +2,6 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 017-2
npc: npc/017-2/_mobs.txt
+npc: npc/017-2/_nodes.txt
npc: npc/017-2/_warps.txt
npc: npc/017-2/mapflags.txt
diff --git a/world/map/npc/017-2/_mobs.txt b/world/map/npc/017-2/_mobs.txt
index 7fbf694f..57e93531 100644
--- a/world/map/npc/017-2/_mobs.txt
+++ b/world/map/npc/017-2/_mobs.txt
@@ -1,9 +1,3 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Theater mobs
-
-
-017-2,0,0,0|script|Mob017-2|32767
-{
- end;
-}
diff --git a/world/map/npc/017-2/_nodes.txt b/world/map/npc/017-2/_nodes.txt
new file mode 100644
index 00000000..0e37f1ef
--- /dev/null
+++ b/world/map/npc/017-2/_nodes.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Theater nodes
+
+// (no nodes)
diff --git a/world/map/npc/017-3/_import.txt b/world/map/npc/017-3/_import.txt
index c2f9b84d..ec5b651f 100644
--- a/world/map/npc/017-3/_import.txt
+++ b/world/map/npc/017-3/_import.txt
@@ -2,5 +2,6 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 017-3
npc: npc/017-3/_mobs.txt
+npc: npc/017-3/_nodes.txt
npc: npc/017-3/_warps.txt
npc: npc/017-3/mapflags.txt
diff --git a/world/map/npc/017-3/_mobs.txt b/world/map/npc/017-3/_mobs.txt
index c498697b..ee92826e 100644
--- a/world/map/npc/017-3/_mobs.txt
+++ b/world/map/npc/017-3/_mobs.txt
@@ -1,9 +1,3 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Woodland Cave mobs
-
-
-017-3,0,0,0|script|Mob017-3|32767
-{
- end;
-}
diff --git a/world/map/npc/017-3/_nodes.txt b/world/map/npc/017-3/_nodes.txt
new file mode 100644
index 00000000..2ebc3af1
--- /dev/null
+++ b/world/map/npc/017-3/_nodes.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Woodland Cave nodes
+
+// (no nodes)
diff --git a/world/map/npc/017-4/_import.txt b/world/map/npc/017-4/_import.txt
index fcd79a8e..33a00b9b 100644
--- a/world/map/npc/017-4/_import.txt
+++ b/world/map/npc/017-4/_import.txt
@@ -2,6 +2,7 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 017-4
npc: npc/017-4/_mobs.txt
+npc: npc/017-4/_nodes.txt
npc: npc/017-4/_warps.txt
npc: npc/017-4/guardingspirit.txt
npc: npc/017-4/mapflags.txt
diff --git a/world/map/npc/017-4/_mobs.txt b/world/map/npc/017-4/_mobs.txt
index 920a1db5..5270e787 100644
--- a/world/map/npc/017-4/_mobs.txt
+++ b/world/map/npc/017-4/_mobs.txt
@@ -1,9 +1,3 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Hideout mobs
-
-
-017-4,0,0,0|script|Mob017-4|32767
-{
- end;
-}
diff --git a/world/map/npc/017-4/_nodes.txt b/world/map/npc/017-4/_nodes.txt
new file mode 100644
index 00000000..357bf9fd
--- /dev/null
+++ b/world/map/npc/017-4/_nodes.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Hideout nodes
+
+// (no nodes)
diff --git a/world/map/npc/017-4/waric.txt b/world/map/npc/017-4/waric.txt
index f98cb0d0..a0f826e9 100644
--- a/world/map/npc/017-4/waric.txt
+++ b/world/map/npc/017-4/waric.txt
@@ -234,7 +234,7 @@ L_Mushroom:
mes "\"Now that you are a student of mine, I will teach you some spells.\"";
next;
mes "\"We will start with an easy one. I will teach you how to summon a wicked mushroom.\"";
- mes "\"The spell consumes a Small Mushroom and a Dark Crystal. Shove the Dark Crystal into the Small Mushroom and yell " + getspellinvocation("summon-wickedmushroom") +".\"";
+ mes "\"The spell consumes a Small Mushroom and a Dark Crystal. Shove the Dark Crystal into the Small Mushroom and yell " + get(.invocation$, "smwmushroom") +".\"";
next;
mes "\"A wicked mushroom will appear to fight for you.\"";
set OrumQuest, 37;
@@ -254,7 +254,7 @@ L_Next4:
next;
mes "\"You have to use two roots for this spell. First you have to take one root and break off all the root hair. Shape it into a stick, if you will. Then put it on top of the other root and form an arrow-like structure.\"";
next;
- mes "\"Once this is done you have to throw it in the air and scream " + getspellinvocation("toxic-dart") + " and the two roots will turn into toxic darts, a projectile you can throw.\"";
+ mes "\"Once this is done you have to throw it in the air and scream " + get(.invocation$, "toxic-dart") + " and the two roots will turn into toxic darts, a projectile you can throw.\"";
next;
mes "\"If you want to learn more, come back later.\"";
set OrumQuest, 38;
@@ -312,7 +312,7 @@ L_SnakesSpell:
L_Next7:
mes "[Waric]";
- mes "\"I said " + getspellinvocation("summon-snakes") + ".\"";
+ mes "\"I said " + get(.invocation$, "summon-snakes") + ".\"";
mes "\"Have fun with those spells and use them to cause hate, anger and death.\"";
set OrumQuest, 41;
goto L_Close;
@@ -341,9 +341,9 @@ L_MoreMagic:
L_Next8:
mes "[Waric]";
mes "\"Yes, of course.\"";
- mes "\"To summon the snakes use " + getspellinvocation("summon-snakes") + ".\"";
- mes "\"Say " + getspellinvocation("toxic-dart") + " to make your roots into toxic darts.\"";
- mes "\"And the first spell, to summon wicked mushrooms, is " + getspellinvocation("summon-wickedmushroom") + ".\"";
+ mes "\"To summon the snakes use " + get(.invocation$, "summon-snakes") + ".\"";
+ mes "\"Say " + get(.invocation$, "toxic-dart") + " to make your roots into toxic darts.\"";
+ mes "\"And the first spell, to summon wicked mushrooms, is " + get(.invocation$, "summon-wickedmushroom") + ".\"";
next;
mes "\"Now leave. Spread chaos with the spells I have taught you!\"";
goto L_Close;
diff --git a/world/map/npc/017-9/_import.txt b/world/map/npc/017-9/_import.txt
index 55b1495e..06bab503 100644
--- a/world/map/npc/017-9/_import.txt
+++ b/world/map/npc/017-9/_import.txt
@@ -2,6 +2,7 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 017-9
npc: npc/017-9/_mobs.txt
+npc: npc/017-9/_nodes.txt
npc: npc/017-9/_warps.txt
npc: npc/017-9/mapflags.txt
npc: npc/017-9/npcs.txt
diff --git a/world/map/npc/017-9/_mobs.txt b/world/map/npc/017-9/_mobs.txt
index 9f351648..d8d6de99 100644
--- a/world/map/npc/017-9/_mobs.txt
+++ b/world/map/npc/017-9/_mobs.txt
@@ -1,9 +1,3 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// GM Lounge mobs
-
-
-017-9,0,0,0|script|Mob017-9|32767
-{
- end;
-}
diff --git a/world/map/npc/017-9/_nodes.txt b/world/map/npc/017-9/_nodes.txt
new file mode 100644
index 00000000..78aae663
--- /dev/null
+++ b/world/map/npc/017-9/_nodes.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// GM Lounge nodes
+
+// (no nodes)
diff --git a/world/map/npc/017-9/npcs.txt b/world/map/npc/017-9/npcs.txt
index b14428c5..2db61d1f 100644
--- a/world/map/npc/017-9/npcs.txt
+++ b/world/map/npc/017-9/npcs.txt
@@ -1,6 +1,6 @@
009-1,42,43,0|script|#SecretDoor|32767,0,0
{
- if (getgmlevel() < 20 && !debug) end;
+ if (GM < MAP_LOUNGE && GM < G_SYSOP && !debug) end;
gmlog "@warp 017-9";
warp "017-9", 27, 23;
end;
@@ -8,7 +8,7 @@
020-1,60,76,0|script|#SecretDoor2|32767,0,0
{
- if (getgmlevel() < 20 && !debug) end;
+ if (GM < MAP_LOUNGE && GM < G_SYSOP && !debug) end;
gmlog "@warp 017-9";
warp "017-9", 29, 21;
end;
@@ -16,7 +16,7 @@
001-1,54,118,0|script|#SecretDoor3|32767,0,0
{
- if (getgmlevel() < 20 && !debug) end;
+ if (GM < MAP_LOUNGE && GM < G_SYSOP && !debug) end;
gmlog "@warp 017-9";
warp "017-9", 21, 21;
end;
@@ -24,7 +24,7 @@
027-2,118,111,0|script|#SecretDoor4|32767,0,0
{
- if (getgmlevel() < 20 && !debug) end;
+ if (GM < MAP_LOUNGE && GM < G_SYSOP && !debug) end;
gmlog "@warp 017-9";
warp "017-9", 31, 21;
end;
@@ -32,15 +32,8 @@
029-1,34,96,0|script|#SecretDoor5|32767,0,0
{
- if (getgmlevel() < 20 && !debug) end;
+ if (GM < MAP_LOUNGE && GM < G_SYSOP && !debug) end;
gmlog "@warp 017-9";
warp "017-9", 23, 21;
end;
}
-
-017-9,30,28,0|script|Numa|393
-{
- set @from_npc, 1;
- callfunc "SuperDebug";
- end;
-}
diff --git a/world/map/npc/018-1/_import.txt b/world/map/npc/018-1/_import.txt
index 087fe43e..bf00cad9 100644
--- a/world/map/npc/018-1/_import.txt
+++ b/world/map/npc/018-1/_import.txt
@@ -2,6 +2,7 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 018-1
npc: npc/018-1/_mobs.txt
+npc: npc/018-1/_nodes.txt
npc: npc/018-1/_warps.txt
npc: npc/018-1/flowerpentagram3.txt
npc: npc/018-1/mapflags.txt
diff --git a/world/map/npc/018-1/_mobs.txt b/world/map/npc/018-1/_mobs.txt
index 942a6d09..ced34aa9 100644
--- a/world/map/npc/018-1/_mobs.txt
+++ b/world/map/npc/018-1/_mobs.txt
@@ -1,101 +1,30 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Woodland Mining Camp mobs
-018-1,136,79,9,41|monster|SeaSlime|1033,10,100000ms,30000ms,Mob018-1::On1033
-018-1,108,87,53,25|monster|ManaBug|1131,10,100000ms,30000ms,Mob018-1::On1131
-018-1,116,44,6,7|monster|SeaSlime|1033,3,100000ms,30000ms,Mob018-1::On1033
-018-1,119,56,13,6|monster|PinkFlower|1014,2,100000ms,30000ms,Mob018-1::On1014
-018-1,175,28,17,19|monster|JackO|1022,1,180000ms,120000ms,Mob018-1::On1022
-018-1,78,59,3,1|monster|YellowSlime|1007,1,100000ms,30000ms,Mob018-1::On1007
-018-1,57,63,14,7|monster|Silkworm|1035,2,100000ms,30000ms,Mob018-1::On1035
-018-1,43,63,31,28|monster|Bat|1017,10,100000ms,30000ms,Mob018-1::On1017
-018-1,134,39,18,10|monster|GrassSnake|1034,4,100000ms,50000ms,Mob018-1::On1034
-018-1,124,42,9,11|monster|GrassSnake|1034,2,100000ms,50000ms,Mob018-1::On1034
-018-1,124,19,22,9|monster|GrassSnake|1034,3,100000ms,50000ms,Mob018-1::On1034
-018-1,122,29,19,9|monster|GrassSnake|1034,2,100000ms,50000ms,Mob018-1::On1034
-018-1,149,45,10,8|monster|Bat|1017,5,100000ms,30000ms,Mob018-1::On1017
-018-1,169,47,20,10|monster|RedSlime|1008,4,120000ms,30000ms,Mob018-1::On1008
-018-1,136,49,13,8|monster|Bat|1017,4,100000ms,30000ms,Mob018-1::On1017
-018-1,166,49,13,9|monster|CloverPatch|1037,1,100000ms,30000ms,Mob018-1::On1037
-018-1,111,62,5,2|monster|Silkworm|1035,1,60000ms,30000ms,Mob018-1::On1035
-018-1,117,50,4,3|monster|SeaSlime|1033,1,120000ms,60000ms,Mob018-1::On1033
-018-1,96,47,18,11|monster|RedSlime|1008,3,100000ms,50000ms,Mob018-1::On1008
-018-1,106,52,15,6|monster|CobaltPlant|1030,1,240000ms,120000ms,Mob018-1::On1030
-018-1,78,55,37,6|monster|RedSlime|1008,7,100000ms,50000ms,Mob018-1::On1008
-018-1,145,24,10,9|monster|RedSlime|1008,3,100000ms,50000ms,Mob018-1::On1008
-018-1,68,89,14,17|monster|Bat|1017,3,100000ms,50000ms,Mob018-1::On1017
-018-1,160,31,11,18|monster|RedSlime|1008,5,100000ms,50000ms,Mob018-1::On1008
-018-1,0,0,0,0|monster|CloverPatch|1037,2,0ms,1000ms,Mob018-1::On1037
-018-1,0,0,0,0|monster|Butterfly|1055,20,30ms,20ms,Mob018-1::On1055
-018-1,134,80,14,39|monster|Maggot|1002,15,30ms,0ms,Mob018-1::On1002
-
-
-018-1,0,0,0|script|Mob018-1|32767
-{
- end;
-
-On1002:
- set @mobID, 1002;
- callfunc "MobPoints";
- end;
-
-On1007:
- set @mobID, 1007;
- callfunc "MobPoints";
- end;
-
-On1008:
- set @mobID, 1008;
- callfunc "MobPoints";
- end;
-
-On1014:
- set @mobID, 1014;
- callfunc "MobPoints";
- end;
-
-On1017:
- set @mobID, 1017;
- callfunc "MobPoints";
- end;
-
-On1022:
- set @mobID, 1022;
- callfunc "MobPoints";
- end;
-
-On1030:
- set @mobID, 1030;
- callfunc "MobPoints";
- end;
-
-On1033:
- set @mobID, 1033;
- callfunc "MobPoints";
- end;
-
-On1034:
- set @mobID, 1034;
- callfunc "MobPoints";
- end;
-
-On1035:
- set @mobID, 1035;
- callfunc "MobPoints";
- end;
-
-On1037:
- set @mobID, 1037;
- callfunc "MobPoints";
- end;
-
-On1055:
- set @mobID, 1055;
- callfunc "MobPoints";
- end;
-
-On1131:
- set @mobID, 1131;
- callfunc "MobPoints";
- end;
-}
+018-1,136,79,9,41|monster|SeaSlime|1033,10,100000ms,30000ms
+018-1,108,87,53,25|monster|ManaBug|1131,10,100000ms,30000ms
+018-1,116,44,6,7|monster|SeaSlime|1033,3,100000ms,30000ms
+018-1,119,56,13,6|monster|PinkFlower|1014,2,100000ms,30000ms
+018-1,175,28,17,19|monster|JackO|1022,1,180000ms,120000ms
+018-1,78,59,3,1|monster|YellowSlime|1007,1,100000ms,30000ms
+018-1,57,63,14,7|monster|Silkworm|1035,2,100000ms,30000ms
+018-1,43,63,31,28|monster|Bat|1017,10,100000ms,30000ms
+018-1,134,39,18,10|monster|GrassSnake|1034,4,100000ms,50000ms
+018-1,124,42,9,11|monster|GrassSnake|1034,2,100000ms,50000ms
+018-1,124,19,22,9|monster|GrassSnake|1034,3,100000ms,50000ms
+018-1,122,29,19,9|monster|GrassSnake|1034,2,100000ms,50000ms
+018-1,149,45,10,8|monster|Bat|1017,5,100000ms,30000ms
+018-1,169,47,20,10|monster|RedSlime|1008,4,120000ms,30000ms
+018-1,136,49,13,8|monster|Bat|1017,4,100000ms,30000ms
+018-1,166,49,13,9|monster|CloverPatch|1037,1,100000ms,30000ms
+018-1,111,62,5,2|monster|Silkworm|1035,1,60000ms,30000ms
+018-1,117,50,4,3|monster|SeaSlime|1033,1,120000ms,60000ms
+018-1,96,47,18,11|monster|RedSlime|1008,3,100000ms,50000ms
+018-1,106,52,15,6|monster|CobaltPlant|1030,1,240000ms,120000ms
+018-1,78,55,37,6|monster|RedSlime|1008,7,100000ms,50000ms
+018-1,145,24,10,9|monster|RedSlime|1008,3,100000ms,50000ms
+018-1,68,89,14,17|monster|Bat|1017,3,100000ms,50000ms
+018-1,160,31,11,18|monster|RedSlime|1008,5,100000ms,50000ms
+018-1,0,0,0,0|monster|CloverPatch|1037,2,0ms,1000ms
+018-1,0,0,0,0|monster|Butterfly|1055,20,30ms,20ms
+018-1,134,80,14,39|monster|Maggot|1002,15,30ms,0ms
diff --git a/world/map/npc/018-1/_nodes.txt b/world/map/npc/018-1/_nodes.txt
new file mode 100644
index 00000000..9ac98a33
--- /dev/null
+++ b/world/map/npc/018-1/_nodes.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Woodland Mining Camp nodes
+
+// (no nodes)
diff --git a/world/map/npc/018-2/_import.txt b/world/map/npc/018-2/_import.txt
index 6c8fcb00..93025f9d 100644
--- a/world/map/npc/018-2/_import.txt
+++ b/world/map/npc/018-2/_import.txt
@@ -2,6 +2,7 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 018-2
npc: npc/018-2/_mobs.txt
+npc: npc/018-2/_nodes.txt
npc: npc/018-2/_warps.txt
npc: npc/018-2/angus.txt
npc: npc/018-2/books.txt
diff --git a/world/map/npc/018-2/_mobs.txt b/world/map/npc/018-2/_mobs.txt
index fb451a92..13188ee7 100644
--- a/world/map/npc/018-2/_mobs.txt
+++ b/world/map/npc/018-2/_mobs.txt
@@ -1,15 +1,4 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Woodland Mining Camp Indoor mobs
-018-2,114,21,4,3|monster|YellowSlime|1007,1,100000ms,30000ms,Mob018-2::On1007
-
-
-018-2,0,0,0|script|Mob018-2|32767
-{
- end;
-
-On1007:
- set @mobID, 1007;
- callfunc "MobPoints";
- end;
-}
+018-2,114,21,4,3|monster|YellowSlime|1007,1,100000ms,30000ms
diff --git a/world/map/npc/018-2/_nodes.txt b/world/map/npc/018-2/_nodes.txt
new file mode 100644
index 00000000..93459a98
--- /dev/null
+++ b/world/map/npc/018-2/_nodes.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Woodland Mining Camp Indoor nodes
+
+// (no nodes)
diff --git a/world/map/npc/018-3/_import.txt b/world/map/npc/018-3/_import.txt
index de5fbfb1..1845c3d1 100644
--- a/world/map/npc/018-3/_import.txt
+++ b/world/map/npc/018-3/_import.txt
@@ -2,6 +2,7 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 018-3
npc: npc/018-3/_mobs.txt
+npc: npc/018-3/_nodes.txt
npc: npc/018-3/_warps.txt
npc: npc/018-3/bookcase.txt
npc: npc/018-3/evil-obelisk.txt
diff --git a/world/map/npc/018-3/_mobs.txt b/world/map/npc/018-3/_mobs.txt
index 46457878..57c48654 100644
--- a/world/map/npc/018-3/_mobs.txt
+++ b/world/map/npc/018-3/_mobs.txt
@@ -1,87 +1,26 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Northern Mines mobs
-018-3,48,29,57,19|monster|Bat|1017,10,100000ms,30000ms,Mob018-3::On1017
-018-3,35,144,31,48|monster|EvilMushroom|1013,10,120000ms,30000ms,Mob018-3::On1013
-018-3,35,65,28,22|monster|Spider|1012,20,100000ms,50000ms,Mob018-3::On1012
-018-3,28,157,3,2|monster|PinkFlower|1014,1,60000ms,30000ms,Mob018-3::On1014
-018-3,99,111,17,41|monster|YellowSlime|1007,10,90000ms,30000ms,Mob018-3::On1007
-018-3,134,140,12,8|monster|Maggot|1002,3,80000ms,40000ms,Mob018-3::On1002
-018-3,82,149,73,26|monster|Spider|1012,8,300000ms,120000ms,Mob018-3::On1012
-018-3,102,172,131,13|monster|BlackScorpion|1009,20,60000ms,10000ms,Mob018-3::On1009
-018-3,174,37,10,31|monster|YellowSlime|1007,5,180000ms,120000ms,Mob018-3::On1007
-018-3,148,148,13,24|monster|Bat|1017,3,180000ms,40000ms,Mob018-3::On1017
-018-3,136,87,21,7|monster|YellowSlime|1007,6,80000ms,40000ms,Mob018-3::On1007
-018-3,81,77,27,21|monster|RedSlime|1008,15,80000ms,40000ms,Mob018-3::On1008
-018-3,111,80,5,6|monster|BlackScorpion|1009,10,80000ms,40000ms,Mob018-3::On1009
-018-3,175,122,5,40|monster|Snake|1010,15,40000ms,20000ms,Mob018-3::On1010
-018-3,172,94,17,17|monster|RedSlime|1008,10,60000ms,30000ms,Mob018-3::On1008
-018-3,59,95,11,8|monster|Spider|1012,15,60000ms,30000ms,Mob018-3::On1012
-018-3,77,92,23,7|monster|BlackScorpion|1009,15,60000ms,30000ms,Mob018-3::On1009
-018-3,94,55,16,8|monster|Snake|1010,5,60000ms,30000ms,Mob018-3::On1010
-018-3,133,39,12,17|monster|Spider|1012,10,60000ms,30000ms,Mob018-3::On1012
-018-3,111,33,30,16|monster|Snake|1010,15,60000ms,30000ms,Mob018-3::On1010
-018-3,68,101,5,4|monster|CaveSnake|1021,4,60000ms,30000ms,Mob018-3::On1021
-018-3,153,96,18,17|monster|CaveMaggot|1056,4,100000ms,30000ms,Mob018-3::On1056
-018-3,99,99,17,17|monster|CaveMaggot|1056,4,100000ms,30000ms,Mob018-3::On1056
-
-
-018-3,0,0,0|script|Mob018-3|32767
-{
- end;
-
-On1002:
- set @mobID, 1002;
- callfunc "MobPoints";
- end;
-
-On1007:
- set @mobID, 1007;
- callfunc "MobPoints";
- end;
-
-On1008:
- set @mobID, 1008;
- callfunc "MobPoints";
- end;
-
-On1009:
- set @mobID, 1009;
- callfunc "MobPoints";
- end;
-
-On1010:
- set @mobID, 1010;
- callfunc "MobPoints";
- end;
-
-On1012:
- set @mobID, 1012;
- callfunc "MobPoints";
- end;
-
-On1013:
- set @mobID, 1013;
- callfunc "MobPoints";
- end;
-
-On1014:
- set @mobID, 1014;
- callfunc "MobPoints";
- end;
-
-On1017:
- set @mobID, 1017;
- callfunc "MobPoints";
- end;
-
-On1021:
- set @mobID, 1021;
- callfunc "MobPoints";
- end;
-
-On1056:
- set @mobID, 1056;
- callfunc "MobPoints";
- end;
-}
+018-3,48,29,57,19|monster|Bat|1017,10,100000ms,30000ms
+018-3,35,144,31,48|monster|EvilMushroom|1013,10,120000ms,30000ms
+018-3,35,65,28,22|monster|Spider|1012,20,100000ms,50000ms
+018-3,28,157,3,2|monster|PinkFlower|1014,1,60000ms,30000ms
+018-3,99,111,17,41|monster|YellowSlime|1007,10,90000ms,30000ms
+018-3,134,140,12,8|monster|Maggot|1002,3,80000ms,40000ms
+018-3,82,149,73,26|monster|Spider|1012,8,300000ms,120000ms
+018-3,102,172,131,13|monster|BlackScorpion|1009,20,60000ms,10000ms
+018-3,174,37,10,31|monster|YellowSlime|1007,5,180000ms,120000ms
+018-3,148,148,13,24|monster|Bat|1017,3,180000ms,40000ms
+018-3,136,87,21,7|monster|YellowSlime|1007,6,80000ms,40000ms
+018-3,81,77,27,21|monster|RedSlime|1008,15,80000ms,40000ms
+018-3,111,80,5,6|monster|BlackScorpion|1009,10,80000ms,40000ms
+018-3,175,122,5,40|monster|Snake|1010,15,40000ms,20000ms
+018-3,172,94,17,17|monster|RedSlime|1008,10,60000ms,30000ms
+018-3,59,95,11,8|monster|Spider|1012,15,60000ms,30000ms
+018-3,77,92,23,7|monster|BlackScorpion|1009,15,60000ms,30000ms
+018-3,94,55,16,8|monster|Snake|1010,5,60000ms,30000ms
+018-3,133,39,12,17|monster|Spider|1012,10,60000ms,30000ms
+018-3,111,33,30,16|monster|Snake|1010,15,60000ms,30000ms
+018-3,68,101,5,4|monster|CaveSnake|1021,4,60000ms,30000ms
+018-3,153,96,18,17|monster|CaveMaggot|1056,4,100000ms,30000ms
+018-3,99,99,17,17|monster|CaveMaggot|1056,4,100000ms,30000ms
diff --git a/world/map/npc/018-3/_nodes.txt b/world/map/npc/018-3/_nodes.txt
new file mode 100644
index 00000000..833941e7
--- /dev/null
+++ b/world/map/npc/018-3/_nodes.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Northern Mines nodes
+
+// (no nodes)
diff --git a/world/map/npc/019-1/_import.txt b/world/map/npc/019-1/_import.txt
index e462165a..9eeea2c7 100644
--- a/world/map/npc/019-1/_import.txt
+++ b/world/map/npc/019-1/_import.txt
@@ -2,6 +2,7 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 019-1
npc: npc/019-1/_mobs.txt
+npc: npc/019-1/_nodes.txt
npc: npc/019-1/_warps.txt
npc: npc/019-1/mapflags.txt
npc: npc/019-1/santa_helper.txt
diff --git a/world/map/npc/019-1/_mobs.txt b/world/map/npc/019-1/_mobs.txt
index 505d18df..28f76d9a 100644
--- a/world/map/npc/019-1/_mobs.txt
+++ b/world/map/npc/019-1/_mobs.txt
@@ -1,33 +1,7 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// snow Field mobs
-019-1,0,0,0,0|monster|Fluffy|1020,50,100000ms,30000ms,Mob019-1::On1020
-019-1,0,0,0,0|monster|Reinboo|1094,4,100000ms,30000ms,Mob019-1::On1094
-019-1,0,0,0,0|monster|WhiteBell|1095,5,100000ms,30000ms,Mob019-1::On1095
-019-1,0,0,0,0|monster|Santaboo|1112,4,100000ms,30000ms,Mob019-1::On1112
-
-
-019-1,0,0,0|script|Mob019-1|32767
-{
- end;
-
-On1020:
- set @mobID, 1020;
- callfunc "MobPoints";
- end;
-
-On1094:
- set @mobID, 1094;
- callfunc "MobPoints";
- end;
-
-On1095:
- set @mobID, 1095;
- callfunc "MobPoints";
- end;
-
-On1112:
- set @mobID, 1112;
- callfunc "MobPoints";
- end;
-}
+019-1,0,0,0,0|monster|Fluffy|1020,50,100000ms,30000ms
+019-1,0,0,0,0|monster|Reinboo|1094,4,100000ms,30000ms
+019-1,0,0,0,0|monster|WhiteBell|1095,5,100000ms,30000ms
+019-1,0,0,0,0|monster|Santaboo|1112,4,100000ms,30000ms
diff --git a/world/map/npc/019-1/_nodes.txt b/world/map/npc/019-1/_nodes.txt
new file mode 100644
index 00000000..091beb4e
--- /dev/null
+++ b/world/map/npc/019-1/_nodes.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// snow Field nodes
+
+// (no nodes)
diff --git a/world/map/npc/019-3/_import.txt b/world/map/npc/019-3/_import.txt
index eca5ede9..d7547724 100644
--- a/world/map/npc/019-3/_import.txt
+++ b/world/map/npc/019-3/_import.txt
@@ -2,5 +2,6 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 019-3
npc: npc/019-3/_mobs.txt
+npc: npc/019-3/_nodes.txt
npc: npc/019-3/_warps.txt
npc: npc/019-3/mapflags.txt
diff --git a/world/map/npc/019-3/_mobs.txt b/world/map/npc/019-3/_mobs.txt
index 26a7771a..3ba50e42 100644
--- a/world/map/npc/019-3/_mobs.txt
+++ b/world/map/npc/019-3/_mobs.txt
@@ -1,21 +1,5 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Snow Cave mobs
-019-3,0,4,0,0|monster|Moggun|1061,10,100000ms,30000ms,Mob019-3::On1061
-019-3,0,4,0,0|monster|Bat|1017,50,100000ms,30000ms,Mob019-3::On1017
-
-
-019-3,0,0,0|script|Mob019-3|32767
-{
- end;
-
-On1017:
- set @mobID, 1017;
- callfunc "MobPoints";
- end;
-
-On1061:
- set @mobID, 1061;
- callfunc "MobPoints";
- end;
-}
+019-3,0,4,0,0|monster|Moggun|1061,10,100000ms,30000ms
+019-3,0,4,0,0|monster|Bat|1017,50,100000ms,30000ms
diff --git a/world/map/npc/019-3/_nodes.txt b/world/map/npc/019-3/_nodes.txt
new file mode 100644
index 00000000..97eefd57
--- /dev/null
+++ b/world/map/npc/019-3/_nodes.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Snow Cave nodes
+
+// (no nodes)
diff --git a/world/map/npc/019-4/_import.txt b/world/map/npc/019-4/_import.txt
index 0d16081c..f9b94579 100644
--- a/world/map/npc/019-4/_import.txt
+++ b/world/map/npc/019-4/_import.txt
@@ -2,5 +2,6 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 019-4
npc: npc/019-4/_mobs.txt
+npc: npc/019-4/_nodes.txt
npc: npc/019-4/_warps.txt
npc: npc/019-4/mapflags.txt
diff --git a/world/map/npc/019-4/_mobs.txt b/world/map/npc/019-4/_mobs.txt
index 43717e0d..6a23a017 100644
--- a/world/map/npc/019-4/_mobs.txt
+++ b/world/map/npc/019-4/_mobs.txt
@@ -1,33 +1,7 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Snow Cave mobs
-019-4,0,0,0,0|monster|Moggun|1061,12,45000ms,30000ms,Mob019-4::On1061
-019-4,47,67,15,9|monster|WhiteSlime|1093,5,45000ms,45000ms,Mob019-4::On1093
-019-4,0,0,0,0|monster|Bat|1017,15,45000ms,25000ms,Mob019-4::On1017
-019-4,0,0,0,0|monster|BlueSlime|1091,7,45000ms,30000ms,Mob019-4::On1091
-
-
-019-4,0,0,0|script|Mob019-4|32767
-{
- end;
-
-On1017:
- set @mobID, 1017;
- callfunc "MobPoints";
- end;
-
-On1061:
- set @mobID, 1061;
- callfunc "MobPoints";
- end;
-
-On1091:
- set @mobID, 1091;
- callfunc "MobPoints";
- end;
-
-On1093:
- set @mobID, 1093;
- callfunc "MobPoints";
- end;
-}
+019-4,0,0,0,0|monster|Moggun|1061,12,45000ms,30000ms
+019-4,47,67,15,9|monster|WhiteSlime|1093,5,45000ms,45000ms
+019-4,0,0,0,0|monster|Bat|1017,15,45000ms,25000ms
+019-4,0,0,0,0|monster|BlueSlime|1091,7,45000ms,30000ms
diff --git a/world/map/npc/019-4/_nodes.txt b/world/map/npc/019-4/_nodes.txt
new file mode 100644
index 00000000..97eefd57
--- /dev/null
+++ b/world/map/npc/019-4/_nodes.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Snow Cave nodes
+
+// (no nodes)
diff --git a/world/map/npc/020-1/_import.txt b/world/map/npc/020-1/_import.txt
index b85bd34f..a48fad5d 100644
--- a/world/map/npc/020-1/_import.txt
+++ b/world/map/npc/020-1/_import.txt
@@ -3,6 +3,7 @@
map: 020-1
npc: npc/020-1/KrickKrackKrock.txt
npc: npc/020-1/_mobs.txt
+npc: npc/020-1/_nodes.txt
npc: npc/020-1/_warps.txt
npc: npc/020-1/dock.txt
npc: npc/020-1/mapflags.txt
diff --git a/world/map/npc/020-1/_mobs.txt b/world/map/npc/020-1/_mobs.txt
index da1ffd27..7890d424 100644
--- a/world/map/npc/020-1/_mobs.txt
+++ b/world/map/npc/020-1/_mobs.txt
@@ -1,15 +1,4 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Nivalis mobs
-020-1,0,0,0,0|monster|WhiteBell|1095,3,100000ms,30000ms,Mob020-1::On1095
-
-
-020-1,0,0,0|script|Mob020-1|32767
-{
- end;
-
-On1095:
- set @mobID, 1095;
- callfunc "MobPoints";
- end;
-}
+020-1,0,0,0,0|monster|WhiteBell|1095,3,100000ms,30000ms
diff --git a/world/map/npc/020-1/_nodes.txt b/world/map/npc/020-1/_nodes.txt
new file mode 100644
index 00000000..07b204f3
--- /dev/null
+++ b/world/map/npc/020-1/_nodes.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Nivalis nodes
+
+// (no nodes)
diff --git a/world/map/npc/020-2/_import.txt b/world/map/npc/020-2/_import.txt
index 5ed442f3..e8d75c4c 100644
--- a/world/map/npc/020-2/_import.txt
+++ b/world/map/npc/020-2/_import.txt
@@ -2,6 +2,7 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 020-2
npc: npc/020-2/_mobs.txt
+npc: npc/020-2/_nodes.txt
npc: npc/020-2/_warps.txt
npc: npc/020-2/baktar.txt
npc: npc/020-2/banker.txt
diff --git a/world/map/npc/020-2/_mobs.txt b/world/map/npc/020-2/_mobs.txt
index 62e1f438..70eb4f73 100644
--- a/world/map/npc/020-2/_mobs.txt
+++ b/world/map/npc/020-2/_mobs.txt
@@ -1,9 +1,3 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Nivalis Indoor mobs
-
-
-020-2,0,0,0|script|Mob020-2|32767
-{
- end;
-}
diff --git a/world/map/npc/020-2/_nodes.txt b/world/map/npc/020-2/_nodes.txt
new file mode 100644
index 00000000..29018595
--- /dev/null
+++ b/world/map/npc/020-2/_nodes.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Nivalis Indoor nodes
+
+// (no nodes)
diff --git a/world/map/npc/020-3/_import.txt b/world/map/npc/020-3/_import.txt
index 8560e23d..b1624874 100644
--- a/world/map/npc/020-3/_import.txt
+++ b/world/map/npc/020-3/_import.txt
@@ -2,5 +2,6 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 020-3
npc: npc/020-3/_mobs.txt
+npc: npc/020-3/_nodes.txt
npc: npc/020-3/_warps.txt
npc: npc/020-3/mapflags.txt
diff --git a/world/map/npc/020-3/_mobs.txt b/world/map/npc/020-3/_mobs.txt
index edb95973..2e7ed4a0 100644
--- a/world/map/npc/020-3/_mobs.txt
+++ b/world/map/npc/020-3/_mobs.txt
@@ -1,23 +1,7 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Ice cave mobs
-020-3,40,36,29,4|monster|Bat|1017,1,100000ms,30000ms,Mob020-3::On1017
-020-3,40,49,34,7|monster|Pinkie|1018,1,100000ms,30000ms,Mob020-3::On1018
-020-3,0,0,0,0|monster|Bat|1017,20,0ms,0ms,Mob020-3::On1017
-020-3,0,0,0,0|monster|Pinkie|1018,10,0ms,0ms,Mob020-3::On1018
-
-
-020-3,0,0,0|script|Mob020-3|32767
-{
- end;
-
-On1017:
- set @mobID, 1017;
- callfunc "MobPoints";
- end;
-
-On1018:
- set @mobID, 1018;
- callfunc "MobPoints";
- end;
-}
+020-3,40,36,29,4|monster|Bat|1017,1,100000ms,30000ms
+020-3,40,49,34,7|monster|Pinkie|1018,1,100000ms,30000ms
+020-3,0,0,0,0|monster|Bat|1017,20,0ms,0ms
+020-3,0,0,0,0|monster|Pinkie|1018,10,0ms,0ms
diff --git a/world/map/npc/020-3/_nodes.txt b/world/map/npc/020-3/_nodes.txt
new file mode 100644
index 00000000..361b2f86
--- /dev/null
+++ b/world/map/npc/020-3/_nodes.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Ice cave nodes
+
+// (no nodes)
diff --git a/world/map/npc/021-3/_import.txt b/world/map/npc/021-3/_import.txt
index c83d6433..33b9119e 100644
--- a/world/map/npc/021-3/_import.txt
+++ b/world/map/npc/021-3/_import.txt
@@ -2,5 +2,6 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 021-3
npc: npc/021-3/_mobs.txt
+npc: npc/021-3/_nodes.txt
npc: npc/021-3/_warps.txt
npc: npc/021-3/mapflags.txt
diff --git a/world/map/npc/021-3/_mobs.txt b/world/map/npc/021-3/_mobs.txt
index 8d6c2591..75449889 100644
--- a/world/map/npc/021-3/_mobs.txt
+++ b/world/map/npc/021-3/_mobs.txt
@@ -1,44 +1,13 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Central Tulimshar Sewers mobs
-021-3,120,38,11,8|monster|CaveMaggot|1056,5,100000ms,30000ms,Mob021-3::On1056
-021-3,103,58,8,3|monster|CaveMaggot|1056,5,100000ms,30000ms,Mob021-3::On1056
-021-3,80,98,34,31|monster|CaveMaggot|1056,5,100000ms,30000ms,Mob021-3::On1056
-021-3,129,82,8,3|monster|CaveMaggot|1056,5,100000ms,30000ms,Mob021-3::On1056
-021-3,140,38,16,8|monster|AngryFireGoblin|1108,3,100000ms,30000ms,Mob021-3::On1108
-021-3,79,98,33,31|monster|BlackScorpion|1009,4,100000ms,1800000ms,Mob021-3::On1009
-021-3,52,53,2,17|monster|GreenSlime|1005,4,40000ms,50000ms,Mob021-3::On1005
-021-3,93,31,28,22|monster|SeaSlime|1033,6,100000ms,30000ms,Mob021-3::On1033
-021-3,121,128,8,3|monster|CaveMaggot|1056,5,100000ms,30000ms,Mob021-3::On1056
-021-3,47,139,8,3|monster|CaveMaggot|1056,5,100000ms,30000ms,Mob021-3::On1056
-
-
-021-3,0,0,0|script|Mob021-3|32767
-{
- end;
-
-On1005:
- set @mobID, 1005;
- callfunc "MobPoints";
- end;
-
-On1009:
- set @mobID, 1009;
- callfunc "MobPoints";
- end;
-
-On1033:
- set @mobID, 1033;
- callfunc "MobPoints";
- end;
-
-On1056:
- set @mobID, 1056;
- callfunc "MobPoints";
- end;
-
-On1108:
- set @mobID, 1108;
- callfunc "MobPoints";
- end;
-}
+021-3,120,38,11,8|monster|CaveMaggot|1056,5,100000ms,30000ms
+021-3,103,58,8,3|monster|CaveMaggot|1056,5,100000ms,30000ms
+021-3,80,98,34,31|monster|CaveMaggot|1056,5,100000ms,30000ms
+021-3,129,82,8,3|monster|CaveMaggot|1056,5,100000ms,30000ms
+021-3,140,38,16,8|monster|AngryFireGoblin|1108,3,100000ms,30000ms
+021-3,79,98,33,31|monster|BlackScorpion|1009,4,100000ms,1800000ms
+021-3,52,53,2,17|monster|GreenSlime|1005,4,40000ms,50000ms
+021-3,93,31,28,22|monster|SeaSlime|1033,6,100000ms,30000ms
+021-3,121,128,8,3|monster|CaveMaggot|1056,5,100000ms,30000ms
+021-3,47,139,8,3|monster|CaveMaggot|1056,5,100000ms,30000ms
diff --git a/world/map/npc/021-3/_nodes.txt b/world/map/npc/021-3/_nodes.txt
new file mode 100644
index 00000000..f55e37ec
--- /dev/null
+++ b/world/map/npc/021-3/_nodes.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Central Tulimshar Sewers nodes
+
+// (no nodes)
diff --git a/world/map/npc/025-1/_import.txt b/world/map/npc/025-1/_import.txt
index a5530f31..9c4af1aa 100644
--- a/world/map/npc/025-1/_import.txt
+++ b/world/map/npc/025-1/_import.txt
@@ -2,6 +2,7 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 025-1
npc: npc/025-1/_mobs.txt
+npc: npc/025-1/_nodes.txt
npc: npc/025-1/_warps.txt
npc: npc/025-1/barrier.txt
npc: npc/025-1/mapflags.txt
diff --git a/world/map/npc/025-1/_mobs.txt b/world/map/npc/025-1/_mobs.txt
index 2a2d27ac..259f0568 100644
--- a/world/map/npc/025-1/_mobs.txt
+++ b/world/map/npc/025-1/_mobs.txt
@@ -1,64 +1,13 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Woodland Swamp mobs
-025-1,100,60,56,79|monster|CloverPatch|1037,3,30000ms,10000ms,Mob025-1::On1037
-025-1,56,96,13,5|monster|CloverPatch|1037,1,1200000ms,10000ms,Mob025-1::On1037
-025-1,56,35,77,33|monster|AlizarinPlant|1032,2,240000ms,12000ms,Mob025-1::On1032
-025-1,55,62,24,13|monster|Snail|1041,7,30000ms,12000ms,Mob025-1::On1041
-025-1,38,84,37,31|monster|Silkworm|1035,18,40000ms,300ms,Mob025-1::On1035
-025-1,96,47,63,55|monster|LogHead|1025,14,18000ms,3000ms,Mob025-1::On1025
-025-1,0,0,0,0|monster|PinkFlower|1014,34,20000ms,5000ms,Mob025-1::On1014
-025-1,0,0,0,0|monster|SpikyMushroom|1019,40,90000ms,500ms,Mob025-1::On1019
-025-1,101,53,55,65|monster|Squirrel|1038,18,60000ms,9000ms,Mob025-1::On1038
-025-1,26,61,15,85|monster|Scorpion|1003,12,100000ms,50000ms,Mob025-1::On1003
-
-
-025-1,0,0,0|script|Mob025-1|32767
-{
- end;
-
-On1003:
- set @mobID, 1003;
- callfunc "MobPoints";
- end;
-
-On1014:
- set @mobID, 1014;
- callfunc "MobPoints";
- end;
-
-On1019:
- set @mobID, 1019;
- callfunc "MobPoints";
- end;
-
-On1025:
- set @mobID, 1025;
- callfunc "MobPoints";
- end;
-
-On1032:
- set @mobID, 1032;
- callfunc "MobPoints";
- end;
-
-On1035:
- set @mobID, 1035;
- callfunc "MobPoints";
- end;
-
-On1037:
- set @mobID, 1037;
- callfunc "MobPoints";
- end;
-
-On1038:
- set @mobID, 1038;
- callfunc "MobPoints";
- end;
-
-On1041:
- set @mobID, 1041;
- callfunc "MobPoints";
- end;
-}
+025-1,100,60,56,79|monster|CloverPatch|1037,3,30000ms,10000ms
+025-1,56,96,13,5|monster|CloverPatch|1037,1,1200000ms,10000ms
+025-1,56,35,77,33|monster|AlizarinPlant|1032,2,240000ms,12000ms
+025-1,55,62,24,13|monster|Snail|1041,7,30000ms,12000ms
+025-1,38,84,37,31|monster|Silkworm|1035,18,40000ms,300ms
+025-1,96,47,63,55|monster|LogHead|1025,14,18000ms,3000ms
+025-1,0,0,0,0|monster|PinkFlower|1014,34,20000ms,5000ms
+025-1,0,0,0,0|monster|SpikyMushroom|1019,40,90000ms,500ms
+025-1,101,53,55,65|monster|Squirrel|1038,18,60000ms,9000ms
+025-1,26,61,15,85|monster|Scorpion|1003,12,100000ms,50000ms
diff --git a/world/map/npc/025-1/_nodes.txt b/world/map/npc/025-1/_nodes.txt
new file mode 100644
index 00000000..805bf118
--- /dev/null
+++ b/world/map/npc/025-1/_nodes.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Woodland Swamp nodes
+
+// (no nodes)
diff --git a/world/map/npc/025-3/_import.txt b/world/map/npc/025-3/_import.txt
index 63ace6ac..83e14f2c 100644
--- a/world/map/npc/025-3/_import.txt
+++ b/world/map/npc/025-3/_import.txt
@@ -2,6 +2,7 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 025-3
npc: npc/025-3/_mobs.txt
+npc: npc/025-3/_nodes.txt
npc: npc/025-3/_warps.txt
npc: npc/025-3/barriers.txt
npc: npc/025-3/mapflags.txt
diff --git a/world/map/npc/025-3/_mobs.txt b/world/map/npc/025-3/_mobs.txt
index 5ccfdfc0..70e432d9 100644
--- a/world/map/npc/025-3/_mobs.txt
+++ b/world/map/npc/025-3/_mobs.txt
@@ -1,33 +1,7 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Rossy Main Hall mobs
-025-3,0,0,0,0|monster|CaveMaggot|1056,100,0ms,100ms,Mob025-3::On1056
-025-3,0,0,0,0|monster|Archant|1060,20,0ms,100ms,Mob025-3::On1060
-025-3,0,0,0,0|monster|AngryScorpion|1057,25,0ms,100ms,Mob025-3::On1057
-025-3,69,153,13,1|monster|Skeleton|1043,1,0ms,30000ms,Mob025-3::On1043
-
-
-025-3,0,0,0|script|Mob025-3|32767
-{
- end;
-
-On1043:
- set @mobID, 1043;
- callfunc "MobPoints";
- end;
-
-On1056:
- set @mobID, 1056;
- callfunc "MobPoints";
- end;
-
-On1057:
- set @mobID, 1057;
- callfunc "MobPoints";
- end;
-
-On1060:
- set @mobID, 1060;
- callfunc "MobPoints";
- end;
-}
+025-3,0,0,0,0|monster|CaveMaggot|1056,100,0ms,100ms
+025-3,0,0,0,0|monster|Archant|1060,20,0ms,100ms
+025-3,0,0,0,0|monster|AngryScorpion|1057,25,0ms,100ms
+025-3,69,153,13,1|monster|Skeleton|1043,1,0ms,30000ms
diff --git a/world/map/npc/025-3/_nodes.txt b/world/map/npc/025-3/_nodes.txt
new file mode 100644
index 00000000..28957b28
--- /dev/null
+++ b/world/map/npc/025-3/_nodes.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Rossy Main Hall nodes
+
+// (no nodes)
diff --git a/world/map/npc/025-4/_import.txt b/world/map/npc/025-4/_import.txt
index cb9fb0e9..9f7c59cf 100644
--- a/world/map/npc/025-4/_import.txt
+++ b/world/map/npc/025-4/_import.txt
@@ -2,6 +2,7 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 025-4
npc: npc/025-4/_mobs.txt
+npc: npc/025-4/_nodes.txt
npc: npc/025-4/_warps.txt
npc: npc/025-4/battlecaves.txt
npc: npc/025-4/clauquer.txt
diff --git a/world/map/npc/025-4/_mobs.txt b/world/map/npc/025-4/_mobs.txt
index 3ad731de..d8664774 100644
--- a/world/map/npc/025-4/_mobs.txt
+++ b/world/map/npc/025-4/_mobs.txt
@@ -1,16 +1,5 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Rossy Battle Caves mobs
-025-4,29,31,20,14|monster|CaveMaggot|1056,3,0ms,100ms,Mob025-4::On1056
-025-4,94,24,20,21|monster|CaveMaggot|1056,5,0ms,100ms,Mob025-4::On1056
-
-
-025-4,0,0,0|script|Mob025-4|32767
-{
- end;
-
-On1056:
- set @mobID, 1056;
- callfunc "MobPoints";
- end;
-}
+025-4,29,31,20,14|monster|CaveMaggot|1056,3,0ms,100ms
+025-4,94,24,20,21|monster|CaveMaggot|1056,5,0ms,100ms
diff --git a/world/map/npc/025-4/_nodes.txt b/world/map/npc/025-4/_nodes.txt
new file mode 100644
index 00000000..bd29621b
--- /dev/null
+++ b/world/map/npc/025-4/_nodes.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Rossy Battle Caves nodes
+
+// (no nodes)
diff --git a/world/map/npc/026-1/_import.txt b/world/map/npc/026-1/_import.txt
index ddd3a0cd..72d1a275 100644
--- a/world/map/npc/026-1/_import.txt
+++ b/world/map/npc/026-1/_import.txt
@@ -2,6 +2,7 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 026-1
npc: npc/026-1/_mobs.txt
+npc: npc/026-1/_nodes.txt
npc: npc/026-1/_warps.txt
npc: npc/026-1/mapflags.txt
npc: npc/026-1/sign.txt
diff --git a/world/map/npc/026-1/_mobs.txt b/world/map/npc/026-1/_mobs.txt
index a99c4bab..9f4d8325 100644
--- a/world/map/npc/026-1/_mobs.txt
+++ b/world/map/npc/026-1/_mobs.txt
@@ -1,55 +1,14 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Swamp mobs
-026-1,0,0,0,0|monster|Wisp|1040,34,120000ms,40000ms,Mob026-1::On1040
-026-1,0,0,0,0|monster|Spectre|1042,34,120000ms,40000ms,Mob026-1::On1042
-026-1,0,0,0,0|monster|Poltergeist|1047,34,120000ms,40000ms,Mob026-1::On1047
-026-1,0,0,0,0|monster|Silkworm|1035,10,300000ms,60000ms,Mob026-1::On1035
-026-1,0,0,0,0|monster|Scorpion|1003,15,300000ms,30000ms,Mob026-1::On1003
-026-1,0,0,0,0|monster|LogHead|1025,8,300000ms,40000ms,Mob026-1::On1025
-026-1,46,74,35,26|monster|GrassSnake|1034,2,100000ms,50000ms,Mob026-1::On1034
-026-1,88,36,35,26|monster|GrassSnake|1034,2,100000ms,50000ms,Mob026-1::On1034
-026-1,35,36,18,16|monster|GrassSnake|1034,2,100000ms,50000ms,Mob026-1::On1034
-026-1,66,33,73,17|monster|GrassSnake|1034,4,100000ms,50000ms,Mob026-1::On1034
-026-1,60,76,61,31|monster|GrassSnake|1034,4,100000ms,50000ms,Mob026-1::On1034
-
-
-026-1,0,0,0|script|Mob026-1|32767
-{
- end;
-
-On1003:
- set @mobID, 1003;
- callfunc "MobPoints";
- end;
-
-On1025:
- set @mobID, 1025;
- callfunc "MobPoints";
- end;
-
-On1034:
- set @mobID, 1034;
- callfunc "MobPoints";
- end;
-
-On1035:
- set @mobID, 1035;
- callfunc "MobPoints";
- end;
-
-On1040:
- set @mobID, 1040;
- callfunc "MobPoints";
- end;
-
-On1042:
- set @mobID, 1042;
- callfunc "MobPoints";
- end;
-
-On1047:
- set @mobID, 1047;
- callfunc "MobPoints";
- end;
-}
+026-1,0,0,0,0|monster|Wisp|1040,34,120000ms,40000ms
+026-1,0,0,0,0|monster|Spectre|1042,34,120000ms,40000ms
+026-1,0,0,0,0|monster|Poltergeist|1047,34,120000ms,40000ms
+026-1,0,0,0,0|monster|Silkworm|1035,10,300000ms,60000ms
+026-1,0,0,0,0|monster|Scorpion|1003,15,300000ms,30000ms
+026-1,0,0,0,0|monster|LogHead|1025,8,300000ms,40000ms
+026-1,46,74,35,26|monster|GrassSnake|1034,2,100000ms,50000ms
+026-1,88,36,35,26|monster|GrassSnake|1034,2,100000ms,50000ms
+026-1,35,36,18,16|monster|GrassSnake|1034,2,100000ms,50000ms
+026-1,66,33,73,17|monster|GrassSnake|1034,4,100000ms,50000ms
+026-1,60,76,61,31|monster|GrassSnake|1034,4,100000ms,50000ms
diff --git a/world/map/npc/026-1/_nodes.txt b/world/map/npc/026-1/_nodes.txt
new file mode 100644
index 00000000..47e3199f
--- /dev/null
+++ b/world/map/npc/026-1/_nodes.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Swamp nodes
+
+// (no nodes)
diff --git a/world/map/npc/027-1/_import.txt b/world/map/npc/027-1/_import.txt
index 103ca8fd..66d24392 100644
--- a/world/map/npc/027-1/_import.txt
+++ b/world/map/npc/027-1/_import.txt
@@ -2,6 +2,7 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 027-1
npc: npc/027-1/_mobs.txt
+npc: npc/027-1/_nodes.txt
npc: npc/027-1/_warps.txt
npc: npc/027-1/crypt.txt
npc: npc/027-1/golbenez.txt
diff --git a/world/map/npc/027-1/_mobs.txt b/world/map/npc/027-1/_mobs.txt
index de1a4b6f..51ce6174 100644
--- a/world/map/npc/027-1/_mobs.txt
+++ b/world/map/npc/027-1/_mobs.txt
@@ -1,61 +1,20 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Graveyard mobs
-027-1,81,91,95,27|monster|Poltergeist|1047,4,900000ms,60000ms,Mob027-1::On1047
-027-1,81,91,97,25|monster|Spectre|1042,4,900000ms,60000ms,Mob027-1::On1042
-027-1,81,91,99,23|monster|Wisp|1040,4,900000ms,60000ms,Mob027-1::On1040
-027-1,37,64,32,20|monster|Skeleton|1043,2,60000ms,8000ms,Mob027-1::On1043
-027-1,37,64,32,20|monster|LadySkeleton|1044,2,60000ms,8000ms,Mob027-1::On1044
-027-1,71,41,31,22|monster|Skeleton|1043,1,175000ms,20000ms,Mob027-1::On1043
-027-1,71,41,31,22|monster|LadySkeleton|1044,1,175000ms,20000ms,Mob027-1::On1044
-027-1,37,41,33,22|monster|Skeleton|1043,4,180000ms,20000ms,Mob027-1::On1043
-027-1,37,41,33,22|monster|LadySkeleton|1044,4,180000ms,20000ms,Mob027-1::On1044
-027-1,105,40,32,21|monster|Skeleton|1043,2,35000ms,20000ms,Mob027-1::On1043
-027-1,105,40,32,21|monster|LadySkeleton|1044,3,33000ms,25000ms,Mob027-1::On1044
-027-1,70,64,31,20|monster|Skeleton|1043,1,60000ms,8000ms,Mob027-1::On1043
-027-1,70,64,31,21|monster|LadySkeleton|1044,1,60000ms,8000ms,Mob027-1::On1044
-027-1,104,64,31,20|monster|Skeleton|1043,2,60000ms,8000ms,Mob027-1::On1043
-027-1,104,64,31,21|monster|LadySkeleton|1044,2,60000ms,8000ms,Mob027-1::On1044
-027-1,70,40,100,20|monster|VampireBat|1066,15,100000ms,30000ms,Mob027-1::On1066
-027-1,99,90,34,16|monster|GrassSnake|1034,3,100000ms,50000ms,Mob027-1::On1034
-
-
-027-1,0,0,0|script|Mob027-1|32767
-{
- end;
-
-On1034:
- set @mobID, 1034;
- callfunc "MobPoints";
- end;
-
-On1040:
- set @mobID, 1040;
- callfunc "MobPoints";
- end;
-
-On1042:
- set @mobID, 1042;
- callfunc "MobPoints";
- end;
-
-On1043:
- set @mobID, 1043;
- callfunc "MobPoints";
- end;
-
-On1044:
- set @mobID, 1044;
- callfunc "MobPoints";
- end;
-
-On1047:
- set @mobID, 1047;
- callfunc "MobPoints";
- end;
-
-On1066:
- set @mobID, 1066;
- callfunc "MobPoints";
- end;
-}
+027-1,81,91,95,27|monster|Poltergeist|1047,4,900000ms,60000ms
+027-1,81,91,97,25|monster|Spectre|1042,4,900000ms,60000ms
+027-1,81,91,99,23|monster|Wisp|1040,4,900000ms,60000ms
+027-1,37,64,32,20|monster|Skeleton|1043,2,60000ms,8000ms
+027-1,37,64,32,20|monster|LadySkeleton|1044,2,60000ms,8000ms
+027-1,71,41,31,22|monster|Skeleton|1043,1,175000ms,20000ms
+027-1,71,41,31,22|monster|LadySkeleton|1044,1,175000ms,20000ms
+027-1,37,41,33,22|monster|Skeleton|1043,4,180000ms,20000ms
+027-1,37,41,33,22|monster|LadySkeleton|1044,4,180000ms,20000ms
+027-1,105,40,32,21|monster|Skeleton|1043,2,35000ms,20000ms
+027-1,105,40,32,21|monster|LadySkeleton|1044,3,33000ms,25000ms
+027-1,70,64,31,20|monster|Skeleton|1043,1,60000ms,8000ms
+027-1,70,64,31,21|monster|LadySkeleton|1044,1,60000ms,8000ms
+027-1,104,64,31,20|monster|Skeleton|1043,2,60000ms,8000ms
+027-1,104,64,31,21|monster|LadySkeleton|1044,2,60000ms,8000ms
+027-1,70,40,100,20|monster|VampireBat|1066,15,100000ms,30000ms
+027-1,99,90,34,16|monster|GrassSnake|1034,3,100000ms,50000ms
diff --git a/world/map/npc/027-1/_nodes.txt b/world/map/npc/027-1/_nodes.txt
new file mode 100644
index 00000000..46a78ab8
--- /dev/null
+++ b/world/map/npc/027-1/_nodes.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Graveyard nodes
+
+// (no nodes)
diff --git a/world/map/npc/027-2/_import.txt b/world/map/npc/027-2/_import.txt
index f9e207b3..4cacd2c1 100644
--- a/world/map/npc/027-2/_import.txt
+++ b/world/map/npc/027-2/_import.txt
@@ -2,6 +2,7 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 027-2
npc: npc/027-2/_mobs.txt
+npc: npc/027-2/_nodes.txt
npc: npc/027-2/_warps.txt
npc: npc/027-2/alacrius.txt
npc: npc/027-2/barman.txt
diff --git a/world/map/npc/027-2/_mobs.txt b/world/map/npc/027-2/_mobs.txt
index ab76e3b0..1c5a6d51 100644
--- a/world/map/npc/027-2/_mobs.txt
+++ b/world/map/npc/027-2/_mobs.txt
@@ -1,39 +1,13 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Graveyard Indoor mobs
-027-2,81,41,11,9|monster|DrunkenSkeleton|1077,1,100000ms,30000ms,Mob027-2::On1077
-027-2,102,99,9,19|monster|TipsySkeleton|1078,1,100000ms,30000ms,Mob027-2::On1078
-027-2,110,26,11,11|monster|TipsySkeleton|1078,1,100000ms,30000ms,Mob027-2::On1078
-027-2,104,28,11,9|monster|DrunkenSkeleton|1077,1,100000ms,30000ms,Mob027-2::On1077
-027-2,89,34,11,9|monster|DrunkenLadySkeleton|1079,1,100000ms,30000ms,Mob027-2::On1079
-027-2,116,26,11,9|monster|DrunkenLadySkeleton|1079,1,100000ms,30000ms,Mob027-2::On1079
-027-2,112,88,28,39|monster|VampireBat|1066,15,100000ms,30000ms,Mob027-2::On1066
-027-2,102,99,9,19|monster|DrunkenSkeleton|1077,1,100000ms,30000ms,Mob027-2::On1077
-027-2,102,99,9,19|monster|TipsySkeleton|1078,1,100000ms,30000ms,Mob027-2::On1078
-027-2,89,34,11,9|monster|TipsySkeleton|1078,1,100000ms,30000ms,Mob027-2::On1078
-
-
-027-2,0,0,0|script|Mob027-2|32767
-{
- end;
-
-On1066:
- set @mobID, 1066;
- callfunc "MobPoints";
- end;
-
-On1077:
- set @mobID, 1077;
- callfunc "MobPoints";
- end;
-
-On1078:
- set @mobID, 1078;
- callfunc "MobPoints";
- end;
-
-On1079:
- set @mobID, 1079;
- callfunc "MobPoints";
- end;
-}
+027-2,81,41,11,9|monster|DrunkenSkeleton|1077,1,100000ms,30000ms
+027-2,102,99,9,19|monster|TipsySkeleton|1078,1,100000ms,30000ms
+027-2,110,26,11,11|monster|TipsySkeleton|1078,1,100000ms,30000ms
+027-2,104,28,11,9|monster|DrunkenSkeleton|1077,1,100000ms,30000ms
+027-2,89,34,11,9|monster|DrunkenLadySkeleton|1079,1,100000ms,30000ms
+027-2,116,26,11,9|monster|DrunkenLadySkeleton|1079,1,100000ms,30000ms
+027-2,112,88,28,39|monster|VampireBat|1066,15,100000ms,30000ms
+027-2,102,99,9,19|monster|DrunkenSkeleton|1077,1,100000ms,30000ms
+027-2,102,99,9,19|monster|TipsySkeleton|1078,1,100000ms,30000ms
+027-2,89,34,11,9|monster|TipsySkeleton|1078,1,100000ms,30000ms
diff --git a/world/map/npc/027-2/_nodes.txt b/world/map/npc/027-2/_nodes.txt
new file mode 100644
index 00000000..78bbb5b6
--- /dev/null
+++ b/world/map/npc/027-2/_nodes.txt
@@ -0,0 +1,16 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Graveyard Indoor nodes
+
+027-2,0,0,0|script|Node027-2|32767
+{
+ end;
+OnInit:
+ setarray .m$, "_N-Alchemy", "027-2";
+ setarray .x1, "_N-Alchemy", 51;
+ setarray .y1, "_N-Alchemy", 100;
+ setarray .x2, "_N-Alchemy", 0;
+ setarray .y2, "_N-Alchemy", 0;
+ setarray .id, "_N-Alchemy", 0;
+ donpcevent "_N-Alchemy::OnMaybeStart";
+ destroy;
+}
diff --git a/world/map/npc/027-3/_import.txt b/world/map/npc/027-3/_import.txt
index af72eb2f..78754482 100644
--- a/world/map/npc/027-3/_import.txt
+++ b/world/map/npc/027-3/_import.txt
@@ -2,6 +2,7 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 027-3
npc: npc/027-3/_mobs.txt
+npc: npc/027-3/_nodes.txt
npc: npc/027-3/_warps.txt
npc: npc/027-3/casket_traps.txt
npc: npc/027-3/general_krukan_door.txt
diff --git a/world/map/npc/027-3/_mobs.txt b/world/map/npc/027-3/_mobs.txt
index 4c7c8ff6..a1926191 100644
--- a/world/map/npc/027-3/_mobs.txt
+++ b/world/map/npc/027-3/_mobs.txt
@@ -1,42 +1,11 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Crypt Basement mobs
-027-3,34,63,29,69|monster|Skeleton|1043,6,60000ms,8000ms,Mob027-3::On1043
-027-3,97,43,59,30|monster|Skeleton|1043,6,60000ms,8000ms,Mob027-3::On1043
-027-3,34,63,29,69|monster|LadySkeleton|1044,4,60000ms,8000ms,Mob027-3::On1044
-027-3,113,78,28,26|monster|LadySkeleton|1044,4,60000ms,8000ms,Mob027-3::On1044
-027-3,113,78,27,27|monster|Skeleton|1043,4,60000ms,8000ms,Mob027-3::On1043
-027-3,81,87,29,22|monster|VampireBat|1066,15,100000ms,30000ms,Mob027-3::On1066
-027-3,74,45,106,33|monster|PoisonSkull|1024,1,60000ms,20000ms,Mob027-3::On1024
-027-3,98,84,60,14|monster|FireSkull|1023,2,60000ms,20000ms,Mob027-3::On1023
-
-
-027-3,0,0,0|script|Mob027-3|32767
-{
- end;
-
-On1023:
- set @mobID, 1023;
- callfunc "MobPoints";
- end;
-
-On1024:
- set @mobID, 1024;
- callfunc "MobPoints";
- end;
-
-On1043:
- set @mobID, 1043;
- callfunc "MobPoints";
- end;
-
-On1044:
- set @mobID, 1044;
- callfunc "MobPoints";
- end;
-
-On1066:
- set @mobID, 1066;
- callfunc "MobPoints";
- end;
-}
+027-3,34,63,29,69|monster|Skeleton|1043,6,60000ms,8000ms
+027-3,97,43,59,30|monster|Skeleton|1043,6,60000ms,8000ms
+027-3,34,63,29,69|monster|LadySkeleton|1044,4,60000ms,8000ms
+027-3,113,78,28,26|monster|LadySkeleton|1044,4,60000ms,8000ms
+027-3,113,78,27,27|monster|Skeleton|1043,4,60000ms,8000ms
+027-3,81,87,29,22|monster|VampireBat|1066,15,100000ms,30000ms
+027-3,74,45,106,33|monster|PoisonSkull|1024,1,60000ms,20000ms
+027-3,98,84,60,14|monster|FireSkull|1023,2,60000ms,20000ms
diff --git a/world/map/npc/027-3/_nodes.txt b/world/map/npc/027-3/_nodes.txt
new file mode 100644
index 00000000..ab655dd1
--- /dev/null
+++ b/world/map/npc/027-3/_nodes.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Crypt Basement nodes
+
+// (no nodes)
diff --git a/world/map/npc/027-4/_import.txt b/world/map/npc/027-4/_import.txt
index 033877af..7bcfbc68 100644
--- a/world/map/npc/027-4/_import.txt
+++ b/world/map/npc/027-4/_import.txt
@@ -2,6 +2,7 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 027-4
npc: npc/027-4/_mobs.txt
+npc: npc/027-4/_nodes.txt
npc: npc/027-4/_warps.txt
npc: npc/027-4/casket_traps.txt
npc: npc/027-4/general_razha_door.txt
diff --git a/world/map/npc/027-4/_mobs.txt b/world/map/npc/027-4/_mobs.txt
index cb65135e..dde5781e 100644
--- a/world/map/npc/027-4/_mobs.txt
+++ b/world/map/npc/027-4/_mobs.txt
@@ -1,24 +1,8 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Crypt Sub-Basement One mobs
-027-4,39,84,38,22|monster|Skeleton|1043,2,60000ms,8000ms,Mob027-4::On1043
-027-4,27,57,15,22|monster|LadySkeleton|1044,2,60000ms,8000ms,Mob027-4::On1044
-027-4,108,77,39,14|monster|Skeleton|1043,2,60000ms,8000ms,Mob027-4::On1043
-027-4,61,37,38,30|monster|LadySkeleton|1044,2,60000ms,8000ms,Mob027-4::On1044
-027-4,101,36,38,30|monster|LadySkeleton|1044,2,60000ms,8000ms,Mob027-4::On1044
-
-
-027-4,0,0,0|script|Mob027-4|32767
-{
- end;
-
-On1043:
- set @mobID, 1043;
- callfunc "MobPoints";
- end;
-
-On1044:
- set @mobID, 1044;
- callfunc "MobPoints";
- end;
-}
+027-4,39,84,38,22|monster|Skeleton|1043,2,60000ms,8000ms
+027-4,27,57,15,22|monster|LadySkeleton|1044,2,60000ms,8000ms
+027-4,108,77,39,14|monster|Skeleton|1043,2,60000ms,8000ms
+027-4,61,37,38,30|monster|LadySkeleton|1044,2,60000ms,8000ms
+027-4,101,36,38,30|monster|LadySkeleton|1044,2,60000ms,8000ms
diff --git a/world/map/npc/027-4/_nodes.txt b/world/map/npc/027-4/_nodes.txt
new file mode 100644
index 00000000..ee3b5dcf
--- /dev/null
+++ b/world/map/npc/027-4/_nodes.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Crypt Sub-Basement One nodes
+
+// (no nodes)
diff --git a/world/map/npc/027-5/_import.txt b/world/map/npc/027-5/_import.txt
index 183dbf49..a0d686c6 100644
--- a/world/map/npc/027-5/_import.txt
+++ b/world/map/npc/027-5/_import.txt
@@ -2,6 +2,7 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 027-5
npc: npc/027-5/_mobs.txt
+npc: npc/027-5/_nodes.txt
npc: npc/027-5/_warps.txt
npc: npc/027-5/casket_traps.txt
npc: npc/027-5/general_terogan_door.txt
diff --git a/world/map/npc/027-5/_mobs.txt b/world/map/npc/027-5/_mobs.txt
index e6958ba9..750163ad 100644
--- a/world/map/npc/027-5/_mobs.txt
+++ b/world/map/npc/027-5/_mobs.txt
@@ -1,41 +1,10 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Crypt Sub-Basement Two mobs
-027-5,69,42,97,41|monster|Wight|1124,6,60000ms,8000ms,Mob027-5::On1124
-027-5,69,56,97,69|monster|VampireBat|1066,30,100000ms,30000ms,Mob027-5::On1066
-027-5,69,42,98,40|monster|Skeleton|1043,8,60000ms,8000ms,Mob027-5::On1043
-027-5,69,41,98,39|monster|LadySkeleton|1044,8,60000ms,8000ms,Mob027-5::On1044
-027-5,68,42,97,40|monster|RedBone|1074,6,60000ms,8000ms,Mob027-5::On1074
-027-5,70,80,98,34|monster|Skeleton|1043,8,60000ms,8000ms,Mob027-5::On1043
-027-5,69,80,99,36|monster|LadySkeleton|1044,8,60000ms,8000ms,Mob027-5::On1044
-
-
-027-5,0,0,0|script|Mob027-5|32767
-{
- end;
-
-On1043:
- set @mobID, 1043;
- callfunc "MobPoints";
- end;
-
-On1044:
- set @mobID, 1044;
- callfunc "MobPoints";
- end;
-
-On1066:
- set @mobID, 1066;
- callfunc "MobPoints";
- end;
-
-On1074:
- set @mobID, 1074;
- callfunc "MobPoints";
- end;
-
-On1124:
- set @mobID, 1124;
- callfunc "MobPoints";
- end;
-}
+027-5,69,42,97,41|monster|Wight|1124,6,60000ms,8000ms
+027-5,69,56,97,69|monster|VampireBat|1066,30,100000ms,30000ms
+027-5,69,42,98,40|monster|Skeleton|1043,8,60000ms,8000ms
+027-5,69,41,98,39|monster|LadySkeleton|1044,8,60000ms,8000ms
+027-5,68,42,97,40|monster|RedBone|1074,6,60000ms,8000ms
+027-5,70,80,98,34|monster|Skeleton|1043,8,60000ms,8000ms
+027-5,69,80,99,36|monster|LadySkeleton|1044,8,60000ms,8000ms
diff --git a/world/map/npc/027-5/_nodes.txt b/world/map/npc/027-5/_nodes.txt
new file mode 100644
index 00000000..4e14e522
--- /dev/null
+++ b/world/map/npc/027-5/_nodes.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Crypt Sub-Basement Two nodes
+
+// (no nodes)
diff --git a/world/map/npc/027-6/_import.txt b/world/map/npc/027-6/_import.txt
index 5c19c47b..48dbcf11 100644
--- a/world/map/npc/027-6/_import.txt
+++ b/world/map/npc/027-6/_import.txt
@@ -2,6 +2,7 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 027-6
npc: npc/027-6/_mobs.txt
+npc: npc/027-6/_nodes.txt
npc: npc/027-6/_warps.txt
npc: npc/027-6/casket_traps.txt
npc: npc/027-6/general_krukan.txt
diff --git a/world/map/npc/027-6/_mobs.txt b/world/map/npc/027-6/_mobs.txt
index 407a697e..a6d6a471 100644
--- a/world/map/npc/027-6/_mobs.txt
+++ b/world/map/npc/027-6/_mobs.txt
@@ -1,9 +1,3 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Crypt Sub-Basement Two mobs
-
-
-027-6,0,0,0|script|Mob027-6|32767
-{
- end;
-}
diff --git a/world/map/npc/027-6/_nodes.txt b/world/map/npc/027-6/_nodes.txt
new file mode 100644
index 00000000..4e14e522
--- /dev/null
+++ b/world/map/npc/027-6/_nodes.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Crypt Sub-Basement Two nodes
+
+// (no nodes)
diff --git a/world/map/npc/027-6/general_krukan.txt b/world/map/npc/027-6/general_krukan.txt
index 6b086cee..1c2ff95f 100644
--- a/world/map/npc/027-6/general_krukan.txt
+++ b/world/map/npc/027-6/general_krukan.txt
@@ -86,7 +86,7 @@ OnTimer5000:
L_Return_1:
set $@CRYPT_FIGHT1_PLAYER_COUNT, 0;
- areatimer "027-6", 0, 0, 79, 84, 10, "General Krukan::OnTick";
+ areatimer 0, "027-6", 0, 0, 79, 84, 10, "General Krukan::OnTick";
end;
L_CryptLogic:
@@ -182,7 +182,7 @@ L_CleanUpLosers:
end;
L_CleanUp:
- areatimer "027-6", 0, 0, 79, 84, 10, "General Krukan::OnReward";
+ areatimer 0, "027-6", 0, 0, 79, 84, 10, "General Krukan::OnReward";
set $@CRYPT_FIGHT1, 0;
set $@CRYPT_FIGHT1_PLAYER_COUNT, 0;
set $@CRYPT_FIGHT1_WAVE, 0;
diff --git a/world/map/npc/027-7/_import.txt b/world/map/npc/027-7/_import.txt
index 8990d426..e4baf4aa 100644
--- a/world/map/npc/027-7/_import.txt
+++ b/world/map/npc/027-7/_import.txt
@@ -2,6 +2,7 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 027-7
npc: npc/027-7/_mobs.txt
+npc: npc/027-7/_nodes.txt
npc: npc/027-7/_warps.txt
npc: npc/027-7/general_razha.txt
npc: npc/027-7/general_razha_exitdoor.txt
diff --git a/world/map/npc/027-7/_mobs.txt b/world/map/npc/027-7/_mobs.txt
index 43867927..a6d6a471 100644
--- a/world/map/npc/027-7/_mobs.txt
+++ b/world/map/npc/027-7/_mobs.txt
@@ -1,9 +1,3 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Crypt Sub-Basement Two mobs
-
-
-027-7,0,0,0|script|Mob027-7|32767
-{
- end;
-}
diff --git a/world/map/npc/027-7/_nodes.txt b/world/map/npc/027-7/_nodes.txt
new file mode 100644
index 00000000..4e14e522
--- /dev/null
+++ b/world/map/npc/027-7/_nodes.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Crypt Sub-Basement Two nodes
+
+// (no nodes)
diff --git a/world/map/npc/027-7/general_razha.txt b/world/map/npc/027-7/general_razha.txt
index e22f6392..f331d95c 100644
--- a/world/map/npc/027-7/general_razha.txt
+++ b/world/map/npc/027-7/general_razha.txt
@@ -86,7 +86,7 @@ OnTimer5000:
L_Return_1:
set $@CRYPT_FIGHT2_PLAYER_COUNT, 0;
- areatimer "027-7", 0, 0, 79, 84, 10, "General Razha::OnTick";
+ areatimer 0, "027-7", 0, 0, 79, 84, 10, "General Razha::OnTick";
end;
L_CryptLogic:
@@ -186,7 +186,7 @@ L_CleanUpLosers:
L_CleanUp:
mapannounce "027-7", "General Razha : How in all hells could that happen? I am lost forever.", 0;
mapannounce "027-4", "General Razha is defeated.", 0;
- areatimer "027-7", 0, 0, 79, 84, 10, "General Razha::OnReward";
+ areatimer 0, "027-7", 0, 0, 79, 84, 10, "General Razha::OnReward";
set $@CRYPT_FIGHT2, 0;
set $@CRYPT_FIGHT2_PLAYER_COUNT, 0;
set $@CRYPT_FIGHT2_WAVE, 0;
diff --git a/world/map/npc/027-8/_import.txt b/world/map/npc/027-8/_import.txt
index b103d346..dc9e06da 100644
--- a/world/map/npc/027-8/_import.txt
+++ b/world/map/npc/027-8/_import.txt
@@ -2,6 +2,7 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 027-8
npc: npc/027-8/_mobs.txt
+npc: npc/027-8/_nodes.txt
npc: npc/027-8/_warps.txt
npc: npc/027-8/general_terogan.txt
npc: npc/027-8/general_terogan_exitdoor.txt
diff --git a/world/map/npc/027-8/_mobs.txt b/world/map/npc/027-8/_mobs.txt
index d38bf647..a6d6a471 100644
--- a/world/map/npc/027-8/_mobs.txt
+++ b/world/map/npc/027-8/_mobs.txt
@@ -1,9 +1,3 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Crypt Sub-Basement Two mobs
-
-
-027-8,0,0,0|script|Mob027-8|32767
-{
- end;
-}
diff --git a/world/map/npc/027-8/_nodes.txt b/world/map/npc/027-8/_nodes.txt
new file mode 100644
index 00000000..4e14e522
--- /dev/null
+++ b/world/map/npc/027-8/_nodes.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Crypt Sub-Basement Two nodes
+
+// (no nodes)
diff --git a/world/map/npc/027-8/general_terogan.txt b/world/map/npc/027-8/general_terogan.txt
index ca8691f0..522b1eaa 100644
--- a/world/map/npc/027-8/general_terogan.txt
+++ b/world/map/npc/027-8/general_terogan.txt
@@ -141,7 +141,7 @@ OnTimer5000:
L_Return_1:
set $@CRYPT_FIGHT3_PLAYER_COUNT, 0;
- areatimer "027-8", 0, 0, 79, 84, 10, "General Terogan#Main::OnTick";
+ areatimer 0, "027-8", 0, 0, 79, 84, 10, "General Terogan#Main::OnTick";
end;
L_CryptLogic:
@@ -249,7 +249,7 @@ L_CleanUpLosers:
L_CleanUp:
mapannounce "027-8", "General Terogan : You might have won this battle, but you will never defeat me!", 0;
- areatimer "027-8", 0, 0, 79, 84, 10, "General Terogan#Main::OnReward";
+ areatimer 0, "027-8", 0, 0, 79, 84, 10, "General Terogan#Main::OnReward";
set $@CRYPT_FIGHT3, 0;
set $@CRYPT_FIGHT3_PLAYER_COUNT, 0;
set $@CRYPT_FIGHT3_WAVE, 0;
diff --git a/world/map/npc/028-1/_import.txt b/world/map/npc/028-1/_import.txt
index 7b323a88..b7221baf 100644
--- a/world/map/npc/028-1/_import.txt
+++ b/world/map/npc/028-1/_import.txt
@@ -2,6 +2,7 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 028-1
npc: npc/028-1/_mobs.txt
+npc: npc/028-1/_nodes.txt
npc: npc/028-1/_warps.txt
npc: npc/028-1/mapflags.txt
npc: npc/028-1/portal.txt
diff --git a/world/map/npc/028-1/_mobs.txt b/world/map/npc/028-1/_mobs.txt
index b0ae65fe..e5e3e7e5 100644
--- a/world/map/npc/028-1/_mobs.txt
+++ b/world/map/npc/028-1/_mobs.txt
@@ -1,9 +1,3 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// GM Island mobs
-
-
-028-1,0,0,0|script|Mob028-1|32767
-{
- end;
-}
diff --git a/world/map/npc/028-1/_nodes.txt b/world/map/npc/028-1/_nodes.txt
new file mode 100644
index 00000000..c4fb65dc
--- /dev/null
+++ b/world/map/npc/028-1/_nodes.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// GM Island nodes
+
+// (no nodes)
diff --git a/world/map/npc/028-3/_import.txt b/world/map/npc/028-3/_import.txt
index 12684d4b..8f0036c0 100644
--- a/world/map/npc/028-3/_import.txt
+++ b/world/map/npc/028-3/_import.txt
@@ -2,5 +2,6 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 028-3
npc: npc/028-3/_mobs.txt
+npc: npc/028-3/_nodes.txt
npc: npc/028-3/_warps.txt
npc: npc/028-3/mapflags.txt
diff --git a/world/map/npc/028-3/_mobs.txt b/world/map/npc/028-3/_mobs.txt
index 1290a483..c3c38c44 100644
--- a/world/map/npc/028-3/_mobs.txt
+++ b/world/map/npc/028-3/_mobs.txt
@@ -1,9 +1,3 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// GM Island Cave mobs
-
-
-028-3,0,0,0|script|Mob028-3|32767
-{
- end;
-}
diff --git a/world/map/npc/028-3/_nodes.txt b/world/map/npc/028-3/_nodes.txt
new file mode 100644
index 00000000..25112bd6
--- /dev/null
+++ b/world/map/npc/028-3/_nodes.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// GM Island Cave nodes
+
+// (no nodes)
diff --git a/world/map/npc/029-1/_import.txt b/world/map/npc/029-1/_import.txt
index c2a6d2ed..b9e64749 100644
--- a/world/map/npc/029-1/_import.txt
+++ b/world/map/npc/029-1/_import.txt
@@ -2,6 +2,7 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 029-1
npc: npc/029-1/_mobs.txt
+npc: npc/029-1/_nodes.txt
npc: npc/029-1/_warps.txt
npc: npc/029-1/aahna.txt
npc: npc/029-1/barrier.txt
diff --git a/world/map/npc/029-1/_mobs.txt b/world/map/npc/029-1/_mobs.txt
index bad7d55a..4fb1734b 100644
--- a/world/map/npc/029-1/_mobs.txt
+++ b/world/map/npc/029-1/_mobs.txt
@@ -1,40 +1,9 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Candor Island mobs
-029-1,46,48,4,1|monster|CloverPatch|1037,1,10000ms,120000ms,Mob029-1::On1037
-029-1,73,93,14,13|monster|Maggot|1002,8,100000ms,30000ms,Mob029-1::On1002
-029-1,90,35,15,11|monster|TameScorpion|1046,16,100000ms,30000ms,Mob029-1::On1046
-029-1,93,100,21,18|monster|TameScorpion|1046,8,100000ms,30000ms,Mob029-1::On1046
-029-1,43,43,31,23|monster|Scorpion|1003,2,100000ms,30000ms,Mob029-1::On1003
-029-1,76,42,52,25|monster|ManaBug|1131,3,30ms,0ms,Mob029-1::On1131
-
-
-029-1,0,0,0|script|Mob029-1|32767
-{
- end;
-
-On1002:
- set @mobID, 1002;
- callfunc "MobPoints";
- end;
-
-On1003:
- set @mobID, 1003;
- callfunc "MobPoints";
- end;
-
-On1037:
- set @mobID, 1037;
- callfunc "MobPoints";
- end;
-
-On1046:
- set @mobID, 1046;
- callfunc "MobPoints";
- end;
-
-On1131:
- set @mobID, 1131;
- callfunc "MobPoints";
- end;
-}
+029-1,46,48,4,1|monster|CloverPatch|1037,1,10000ms,120000ms
+029-1,73,93,14,13|monster|Maggot|1002,8,100000ms,30000ms
+029-1,90,35,15,11|monster|TameScorpion|1046,16,100000ms,30000ms
+029-1,93,100,21,18|monster|TameScorpion|1046,8,100000ms,30000ms
+029-1,43,43,31,23|monster|Scorpion|1003,2,100000ms,30000ms
+029-1,76,42,52,25|monster|ManaBug|1131,3,30ms,0ms
diff --git a/world/map/npc/029-1/_nodes.txt b/world/map/npc/029-1/_nodes.txt
new file mode 100644
index 00000000..cde06d82
--- /dev/null
+++ b/world/map/npc/029-1/_nodes.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Candor Island nodes
+
+// (no nodes)
diff --git a/world/map/npc/029-1/barrier.txt b/world/map/npc/029-1/barrier.txt
index e6c580ad..7414f78b 100644
--- a/world/map/npc/029-1/barrier.txt
+++ b/world/map/npc/029-1/barrier.txt
@@ -18,6 +18,6 @@ OnTalk:
end;
OnCommandTalk:
- areatimer "029-1", 61, 61, 69, 73, 0, "#CandorAnnouncer::OnTalk";
+ areatimer 0, "029-1", 61, 61, 69, 73, 0, "#CandorAnnouncer::OnTalk";
end;
}
diff --git a/world/map/npc/029-2/_import.txt b/world/map/npc/029-2/_import.txt
index 29e2607a..b87b6dc1 100644
--- a/world/map/npc/029-2/_import.txt
+++ b/world/map/npc/029-2/_import.txt
@@ -2,7 +2,9 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 029-2
npc: npc/029-2/_mobs.txt
+npc: npc/029-2/_nodes.txt
npc: npc/029-2/_warps.txt
+npc: npc/029-2/alchemy.txt
npc: npc/029-2/bankroom.txt
npc: npc/029-2/barrels.txt
npc: npc/029-2/barrels_config.txt
diff --git a/world/map/npc/029-2/_mobs.txt b/world/map/npc/029-2/_mobs.txt
index 02d3fbd9..a63fae65 100644
--- a/world/map/npc/029-2/_mobs.txt
+++ b/world/map/npc/029-2/_mobs.txt
@@ -1,15 +1,4 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Candor Island Indoor mobs
-029-2,33,57,24,7|monster|HouseMaggot|1050,7,100000ms,30000ms,Mob029-2::On1050
-
-
-029-2,0,0,0|script|Mob029-2|32767
-{
- end;
-
-On1050:
- set @mobID, 1050;
- callfunc "MobPoints";
- end;
-}
+029-2,33,57,24,7|monster|HouseMaggot|1050,7,100000ms,30000ms
diff --git a/world/map/npc/029-2/_nodes.txt b/world/map/npc/029-2/_nodes.txt
new file mode 100644
index 00000000..9e38e0e1
--- /dev/null
+++ b/world/map/npc/029-2/_nodes.txt
@@ -0,0 +1,16 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Candor Island Indoor nodes
+
+029-2,0,0,0|script|Node029-2|32767
+{
+ end;
+OnInit:
+ setarray .m$, "_N-Alchemy", "029-2";
+ setarray .x1, "_N-Alchemy", 113;
+ setarray .y1, "_N-Alchemy", 57;
+ setarray .x2, "_N-Alchemy", 0;
+ setarray .y2, "_N-Alchemy", 0;
+ setarray .id, "_N-Alchemy", 0;
+ donpcevent "_N-Alchemy::OnMaybeStart";
+ destroy;
+}
diff --git a/world/map/npc/029-2/alchemy.txt b/world/map/npc/029-2/alchemy.txt
new file mode 100644
index 00000000..b5e4732c
--- /dev/null
+++ b/world/map/npc/029-2/alchemy.txt
@@ -0,0 +1,99 @@
+-|script|_N-Alchemy|32767
+{
+ set @npc_distance, 1;
+ callfunc "PCtoNPCRange";
+ if (@npc_check) end;
+
+ title "Alchemy Lab";
+ mes "This is an alchemy lab.";
+ mes "With it, you can combine reagents together to create powerful potions.";
+ next;
+ clear;
+ mes "##BDrag & drop 2 items from your inventory. All items used will be lost.##b";
+ cleararray @alchlab_items$[0], "", 2; // since we're not using a scoped (.@) array, we need to clean it
+ requestitem @alchlab_items$[0], 2; // TODO: add a craft builtin (npc action 12)
+ clear;
+ if (@alchlab_items$[0] == "" || @alchlab_items$[1] == "")
+ goto L_NoItems;
+
+ mes "You are about to combine the following:";
+ mes " ["+ getitemlink(@alchlab_items$[0]) +"]";
+ mes " ["+ getitemlink(@alchlab_items$[1]) +"]";
+ mes;
+ mes "##BWarning! This will permanently destroy the selected items.##b";
+ // can not use a scope variable to store item names because menu is a script terminator (destroys the scope)
+ menu
+ "Abort Mission.", L_Abort,
+ "Proceed.", L_Proceed;
+
+L_Proceed:
+ // XXX: here we could make it wait a little, while the potion is boiling (and show an animation/particles/sound)
+ if (countitem(@alchlab_items$[0]) < 1 || countitem(@alchlab_items$[1]) < 1) // this shouldn't happen, but just to be safe..
+ goto L_NoItems;
+ delitem @alchlab_items$[0], 1;
+ delitem @alchlab_items$[1], 1;
+ if (@alchlab_items$[0] == "BottleOfWater" || @alchlab_items$[1] == "BottleOfWater") // give back used bottles
+ getitem "EmptyBottle", if_then_else(@alchlab_items$[0] == "BottleOfWater" && @alchlab_items$[1] == "BottleOfWater",2,1);
+
+ set .@n, -3;
+ goto L_CheckRecipes;
+
+L_CheckRecipes:
+ set .@n, .@n+3;
+ if (.@n == get(.rsize, "_N-Alchemy"))
+ goto L_Failed;
+ if (!(get(.recipes$[.@n], "_N-Alchemy") == @alchlab_items$[0] && get(.recipes$[.@n+1], "_N-Alchemy") == @alchlab_items$[1]) &&
+ !(get(.recipes$[.@n], "_N-Alchemy") == @alchlab_items$[1] && get(.recipes$[.@n+1], "_N-Alchemy") == @alchlab_items$[0]))
+ goto L_CheckRecipes;
+
+ getitem get(.recipes$[.@n+2], "_N-Alchemy"), 1; // XXX: here we could also make it fail sometimes depending on your expertise
+
+ // XXX: here we could make it give profession/crafting exp
+ clear;
+ mes "You combined the following:";
+ mes " ["+ getitemlink(@alchlab_items$[0]) +"]";
+ mes " ["+ getitemlink(@alchlab_items$[1]) +"]";
+ mes;
+ mes "You obtained:";
+ mes " ["+ getitemlink(get(.recipes$[.@n+2], "_N-Alchemy")) +"]";
+ close;
+
+L_NoItems:
+ mes "You must put exactly 2 items.";
+ close;
+
+L_Failed:
+ mes "The potion bubbles violently and evaporates."; // XXX: here we could have random failure messages
+ close;
+
+L_Abort:
+ close;
+
+S_Spawn:
+ set .@s, getarraysize(.x1);
+ if (.spawned >= .@s)
+ goto S_Return;
+ set .@n$, "#_Al-lab"+chr(3)+.spawned;
+ void puppet(.m$[.spawned], .x1[.spawned], .y1[.spawned], .@n$, 400); // TODO: make a npc like npc 400 but with hoverCursor="action" => looks better for things like crafting
+ set .spawned, .spawned + 1;
+ if (.spawned < .@s)
+ goto S_Spawn;
+ return;
+
+S_Return:
+ return;
+
+OnMaybeStart:
+ callsub S_Spawn;
+ if (.started == 0)
+ goto L_InitVars;
+ end;
+
+L_InitVars:
+ setarray .recipes$[0], 0,
+ "DilutedConcentrationPot", "DarkConcentrationPotion", "ConcentrationPotion",
+ "CactusDrink", "CactusDrink", "CactusPotion",
+ "PinkPetal", "BottleOfWater", "ConcentrationPotion";
+ set .rsize, getarraysize(.recipes$);
+ end;
+}
diff --git a/world/map/npc/029-2/morgan.txt b/world/map/npc/029-2/morgan.txt
index 1f8f19f4..d5604f93 100644
--- a/world/map/npc/029-2/morgan.txt
+++ b/world/map/npc/029-2/morgan.txt
@@ -78,7 +78,7 @@ L_Start:
mes "\"Various wands and staffs are found throughout the land with many different strengths and weaknesses.\"";
mes "\"To use the wand you need to have it equipped and speak the incantation to let it tap into your mana.\"";
mes "\"As the power of your magic grows so will the spells you can cast.\"";
- mes "\"Lets start with a basic wand attack. " + getspellinvocation("wand") + "\"";
+ mes "\"Lets start with a basic wand attack. " + get(.invocation$, "spell-wand") + "\"";
mes "\"Equip the wand and lets try out that spell.\"";
mes "\"To cast a spell open the chat window, type the invocation and press enter.\"";
mes "\"Speak to me again once you've cast the spell.\"";
@@ -86,7 +86,7 @@ L_Start:
L_Started:
mes "[Morgan]";
- mes "\"Lets start with a basic wand attack. " + getspellinvocation("wand") + "\"";
+ mes "\"Lets start with a basic wand attack. " + get(.invocation$, "spell-wand") + "\"";
mes "\"Equip the wand and lets try out that spell.\"";
mes "\"To cast a spell open the chat window, type the invocation and press enter.\"";
mes "\"Speak to me again once you've cast the spell.\"";
@@ -95,7 +95,7 @@ L_Started:
L_CastOnce:
mes "[Morgan]";
mes "\"Ok, good job! Looks like you have good mana flow.\"";
- mes "\"Onto the next lesson. Now that you have " + getspellinvocation("wand") + " cast,\"";
+ mes "\"Onto the next lesson. Now that you have " + get(.invocation$, "spell-wand") + " cast,\"";
mes "\"Each time you attack the wand will convert a bit of you mana into a magic bolt.\"";
mes "\"After so many attacks, you will need to recast the invocation to stay attuned to the wand.\"";
mes "\"(Logging out will also cancel any spell effects currently active in-game.).\"";
@@ -106,7 +106,7 @@ L_CastOnce:
L_LearningDone:
mes "[Morgan]";
- mes "\"" + getspellinvocation("wand") + " is a basic wand attack.\"";
+ mes "\"" + get(.invocation$, "spell-wand") + " is a basic wand attack.\"";
mes "\"A Wand must be equipped to use the spell.\"";
mes "\"To cast a spell open the chat window, type the invocation and press enter.\"";
mes "\"I've taught you all I can for now. You should visit the Mana Seed north west of Hurnscald.\"";
diff --git a/world/map/npc/029-2/tanisha.txt b/world/map/npc/029-2/tanisha.txt
index 7142721e..025cc499 100644
--- a/world/map/npc/029-2/tanisha.txt
+++ b/world/map/npc/029-2/tanisha.txt
@@ -221,7 +221,7 @@ OnTimer1000:
if (getareausers("029-2", 98, 84, 106, 89) == 0)
goto L_CleanUp;
// This is needed because multiple players can be in the area at once
- areatimer "029-2", 98, 84, 106, 89, 0, "Tanisha::OnTick";
+ areatimer 0, "029-2", 98, 84, 106, 89, 0, "Tanisha::OnTick";
end;
L_CleanUp:
diff --git a/world/map/npc/029-3/_import.txt b/world/map/npc/029-3/_import.txt
index f879a861..2fe4f885 100644
--- a/world/map/npc/029-3/_import.txt
+++ b/world/map/npc/029-3/_import.txt
@@ -2,6 +2,7 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 029-3
npc: npc/029-3/_mobs.txt
+npc: npc/029-3/_nodes.txt
npc: npc/029-3/_warps.txt
npc: npc/029-3/barrier.txt
npc: npc/029-3/mapflags.txt
diff --git a/world/map/npc/029-3/_mobs.txt b/world/map/npc/029-3/_mobs.txt
index 9a83bf7f..83f4ee2f 100644
--- a/world/map/npc/029-3/_mobs.txt
+++ b/world/map/npc/029-3/_mobs.txt
@@ -1,9 +1,3 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Candor Cave mobs
-
-
-029-3,0,0,0|script|Mob029-3|32767
-{
- end;
-}
diff --git a/world/map/npc/029-3/_nodes.txt b/world/map/npc/029-3/_nodes.txt
new file mode 100644
index 00000000..127723aa
--- /dev/null
+++ b/world/map/npc/029-3/_nodes.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Candor Cave nodes
+
+// (no nodes)
diff --git a/world/map/npc/029-3/parua.txt b/world/map/npc/029-3/parua.txt
index 5ebcc4d7..ef630413 100644
--- a/world/map/npc/029-3/parua.txt
+++ b/world/map/npc/029-3/parua.txt
@@ -187,7 +187,7 @@ OnTimer5000:
L_Return_1:
set $@FIGHT_CAVE_PLAYER_COUNT, 0;
- areatimer "029-3", 20, 20, 70, 60, 10, "Parua::OnTick";
+ areatimer 0, "029-3", 20, 20, 70, 60, 10, "Parua::OnTick";
end;
L_CaveLogic:
@@ -215,7 +215,7 @@ L_NextRound:
goto L_CleanUp;
set $@FIGHT_CAVE_POINTS, $@FIGHT_CAVE_LEVEL;
- areatimer "029-3", 20, 20, 70, 60, 10, "Parua::OnNewRound";
+ areatimer 0, "029-3", 20, 20, 70, 60, 10, "Parua::OnNewRound";
set $@candor_npctalk$, "The next round (level " + $@FIGHT_CAVE_LEVEL + ") is starting with " + $@FIGHT_CAVE_PLAYER_COUNT + " player(s) left alive.";
donpcevent "#CandorAnnouncer::OnCommandTalk";
@@ -360,7 +360,7 @@ L_CleanUp:
npctalk strnpcinfo(0), "Game Over";
set $@candor_npctalk$, "The dungeon is now ready for its next victims.";
donpcevent "#CandorAnnouncer::OnCommandTalk";
- areatimer "029-3", 20, 20, 70, 60, 10, "Parua::OnReward";
+ areatimer 0, "029-3", 20, 20, 70, 60, 10, "Parua::OnReward";
set $@FIGHT_CAVE_STATUS, 0;
set $@ANNOUNCE_TIME, 0;
set $@FIGHT_CAVE_PAID, 0;
diff --git a/world/map/npc/030-2/_import.txt b/world/map/npc/030-2/_import.txt
index 2588ec56..938c74e8 100644
--- a/world/map/npc/030-2/_import.txt
+++ b/world/map/npc/030-2/_import.txt
@@ -2,6 +2,7 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 030-2
npc: npc/030-2/_mobs.txt
+npc: npc/030-2/_nodes.txt
npc: npc/030-2/_warps.txt
npc: npc/030-2/avalia.txt
npc: npc/030-2/basic_npcs.txt
diff --git a/world/map/npc/030-2/_mobs.txt b/world/map/npc/030-2/_mobs.txt
index 664e8111..7664126e 100644
--- a/world/map/npc/030-2/_mobs.txt
+++ b/world/map/npc/030-2/_mobs.txt
@@ -1,9 +1,3 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Christmas Inn mobs
-
-
-030-2,0,0,0|script|Mob030-2|32767
-{
- end;
-}
diff --git a/world/map/npc/030-2/_nodes.txt b/world/map/npc/030-2/_nodes.txt
new file mode 100644
index 00000000..8fea3767
--- /dev/null
+++ b/world/map/npc/030-2/_nodes.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Christmas Inn nodes
+
+// (no nodes)
diff --git a/world/map/npc/030-3/_import.txt b/world/map/npc/030-3/_import.txt
index bbce8cb4..252027e4 100644
--- a/world/map/npc/030-3/_import.txt
+++ b/world/map/npc/030-3/_import.txt
@@ -2,6 +2,7 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 030-3
npc: npc/030-3/_mobs.txt
+npc: npc/030-3/_nodes.txt
npc: npc/030-3/_warps.txt
npc: npc/030-3/mapflags.txt
npc: npc/030-3/orum_homunculus.txt
diff --git a/world/map/npc/030-3/_mobs.txt b/world/map/npc/030-3/_mobs.txt
index 9d4b3b43..d1a3f5e8 100644
--- a/world/map/npc/030-3/_mobs.txt
+++ b/world/map/npc/030-3/_mobs.txt
@@ -1,9 +1,3 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// The Frozen Lake mobs
-
-
-030-3,0,0,0|script|Mob030-3|32767
-{
- end;
-}
diff --git a/world/map/npc/030-3/_nodes.txt b/world/map/npc/030-3/_nodes.txt
new file mode 100644
index 00000000..e78786b3
--- /dev/null
+++ b/world/map/npc/030-3/_nodes.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// The Frozen Lake nodes
+
+// (no nodes)
diff --git a/world/map/npc/030-4/_import.txt b/world/map/npc/030-4/_import.txt
index b4b8153a..26492173 100644
--- a/world/map/npc/030-4/_import.txt
+++ b/world/map/npc/030-4/_import.txt
@@ -2,6 +2,7 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 030-4
npc: npc/030-4/_mobs.txt
+npc: npc/030-4/_nodes.txt
npc: npc/030-4/_warps.txt
npc: npc/030-4/mana_battery.txt
npc: npc/030-4/mapflags.txt
diff --git a/world/map/npc/030-4/_mobs.txt b/world/map/npc/030-4/_mobs.txt
index 97ff93a8..e53861b5 100644
--- a/world/map/npc/030-4/_mobs.txt
+++ b/world/map/npc/030-4/_mobs.txt
@@ -1,9 +1,3 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Christmas Inn Warehouse mobs
-
-
-030-4,0,0,0|script|Mob030-4|32767
-{
- end;
-}
diff --git a/world/map/npc/030-4/_nodes.txt b/world/map/npc/030-4/_nodes.txt
new file mode 100644
index 00000000..14284ca5
--- /dev/null
+++ b/world/map/npc/030-4/_nodes.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Christmas Inn Warehouse nodes
+
+// (no nodes)
diff --git a/world/map/npc/030-4/mana_battery.txt b/world/map/npc/030-4/mana_battery.txt
index aea601c5..15ff40c3 100644
--- a/world/map/npc/030-4/mana_battery.txt
+++ b/world/map/npc/030-4/mana_battery.txt
@@ -197,7 +197,7 @@ OnTimer5000:
L_Return_1:
set $@XmasBossPlayerCount, 0;
- areatimer "030-4", 0, 0, 60, 60, 10, "AniManOMat::OnTick";
+ areatimer 0, "030-4", 0, 0, 60, 60, 10, "AniManOMat::OnTick";
end;
L_CaveLogic:
@@ -294,7 +294,7 @@ L_Finished:
goto L_CleanUp;
L_CleanUp:
- areatimer "030-4", 0, 0, 50, 50, 10, "AniManOMat::OnReward";
+ areatimer 0, "030-4", 0, 0, 50, 50, 10, "AniManOMat::OnReward";
set $@XmasBossPlayerCount, 0;
set $@XmasBossRound, 0;
set $@BombTimer, 0;
@@ -338,7 +338,7 @@ L_EndNice:
end;
OnCommandChamberReset:
- areatimer "030-4", 0, 0, 50, 50, 10, "AniManOMat::OnReward";
+ areatimer 0, "030-4", 0, 0, 50, 50, 10, "AniManOMat::OnReward";
set $@XmasBattleStatus, 0;
set $@XmasBossPlayerCount, 0;
set $@XmasBossRound, 0;
diff --git a/world/map/npc/031-1/_import.txt b/world/map/npc/031-1/_import.txt
index 827a60e8..fe66c2d2 100644
--- a/world/map/npc/031-1/_import.txt
+++ b/world/map/npc/031-1/_import.txt
@@ -2,6 +2,7 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 031-1
npc: npc/031-1/_mobs.txt
+npc: npc/031-1/_nodes.txt
npc: npc/031-1/_warps.txt
npc: npc/031-1/angelaOutside.txt
npc: npc/031-1/dock.txt
diff --git a/world/map/npc/031-1/_mobs.txt b/world/map/npc/031-1/_mobs.txt
index d5a747fb..c8d85539 100644
--- a/world/map/npc/031-1/_mobs.txt
+++ b/world/map/npc/031-1/_mobs.txt
@@ -1,33 +1,7 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Nivalis Port mobs
-031-1,0,0,0,0|monster|Fluffy|1020,10,100000ms,30000ms,Mob031-1::On1020
-031-1,0,0,0,0|monster|Pollett|1113,14,100000ms,30000ms,Mob031-1::On1113
-031-1,76,26,10,5|monster|WhiteSlime|1093,7,100000ms,30000ms,Mob031-1::On1093
-031-1,0,0,0,0|monster|WhiteBell|1095,4,100000ms,30000ms,Mob031-1::On1095
-
-
-031-1,0,0,0|script|Mob031-1|32767
-{
- end;
-
-On1020:
- set @mobID, 1020;
- callfunc "MobPoints";
- end;
-
-On1093:
- set @mobID, 1093;
- callfunc "MobPoints";
- end;
-
-On1095:
- set @mobID, 1095;
- callfunc "MobPoints";
- end;
-
-On1113:
- set @mobID, 1113;
- callfunc "MobPoints";
- end;
-}
+031-1,0,0,0,0|monster|Fluffy|1020,10,100000ms,30000ms
+031-1,0,0,0,0|monster|Pollett|1113,14,100000ms,30000ms
+031-1,76,26,10,5|monster|WhiteSlime|1093,7,100000ms,30000ms
+031-1,0,0,0,0|monster|WhiteBell|1095,4,100000ms,30000ms
diff --git a/world/map/npc/031-1/_nodes.txt b/world/map/npc/031-1/_nodes.txt
new file mode 100644
index 00000000..c369eff4
--- /dev/null
+++ b/world/map/npc/031-1/_nodes.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Nivalis Port nodes
+
+// (no nodes)
diff --git a/world/map/npc/031-2/_import.txt b/world/map/npc/031-2/_import.txt
index 2e3f4e77..cfb6eb4a 100644
--- a/world/map/npc/031-2/_import.txt
+++ b/world/map/npc/031-2/_import.txt
@@ -2,6 +2,7 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 031-2
npc: npc/031-2/_mobs.txt
+npc: npc/031-2/_nodes.txt
npc: npc/031-2/_warps.txt
npc: npc/031-2/angelaHouse.txt
npc: npc/031-2/cindyHouse.txt
diff --git a/world/map/npc/031-2/_mobs.txt b/world/map/npc/031-2/_mobs.txt
index ab4d5c66..b21a6a20 100644
--- a/world/map/npc/031-2/_mobs.txt
+++ b/world/map/npc/031-2/_mobs.txt
@@ -1,9 +1,3 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Angela's House mobs
-
-
-031-2,0,0,0|script|Mob031-2|32767
-{
- end;
-}
diff --git a/world/map/npc/031-2/_nodes.txt b/world/map/npc/031-2/_nodes.txt
new file mode 100644
index 00000000..f62ab315
--- /dev/null
+++ b/world/map/npc/031-2/_nodes.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Angela's House nodes
+
+// (no nodes)
diff --git a/world/map/npc/031-3/_import.txt b/world/map/npc/031-3/_import.txt
index 0094b579..bd4af770 100644
--- a/world/map/npc/031-3/_import.txt
+++ b/world/map/npc/031-3/_import.txt
@@ -2,6 +2,7 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 031-3
npc: npc/031-3/_mobs.txt
+npc: npc/031-3/_nodes.txt
npc: npc/031-3/_warps.txt
npc: npc/031-3/labyrinth.txt
npc: npc/031-3/mapflags.txt
diff --git a/world/map/npc/031-3/_mobs.txt b/world/map/npc/031-3/_mobs.txt
index ccfb1199..2004a2f2 100644
--- a/world/map/npc/031-3/_mobs.txt
+++ b/world/map/npc/031-3/_mobs.txt
@@ -1,138 +1,92 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Ice Labyrinth mobs
-031-3,230,279,25,26|monster|IceGoblin|1058,5,100000ms,30000ms,Mob031-3::On1058
-031-3,195,277,25,26|monster|IceGoblin|1058,3,100000ms,30000ms,Mob031-3::On1058
-031-3,213,282,66,43|monster|Bat|1017,5,100000ms,30000ms,Mob031-3::On1017
-031-3,37,213,27,23|monster|Yeti|1072,2,100000ms,30000ms,Mob031-3::On1072
-031-3,35,212,27,23|monster|Bat|1017,11,100000ms,30000ms,Mob031-3::On1017
-031-3,38,147,44,68|monster|Moggun|1061,19,100000ms,30000ms,Mob031-3::On1061
-031-3,97,261,42,22|monster|Moggun|1061,5,100000ms,30000ms,Mob031-3::On1061
-031-3,97,291,42,22|monster|Moggun|1061,5,100000ms,30000ms,Mob031-3::On1061
-031-3,36,148,64,43|monster|Bat|1017,11,100000ms,30000ms,Mob031-3::On1017
-031-3,97,277,22,42|monster|Bat|1017,11,100000ms,30000ms,Mob031-3::On1017
-031-3,148,282,22,42|monster|Bat|1017,11,100000ms,30000ms,Mob031-3::On1017
-031-3,145,293,25,26|monster|IceGoblin|1058,6,100000ms,30000ms,Mob031-3::On1058
-031-3,98,214,39,44|monster|IceElement|1071,2,100000ms,30000ms,Mob031-3::On1071
-031-3,99,214,25,26|monster|IceGoblin|1058,3,100000ms,30000ms,Mob031-3::On1058
-031-3,198,144,29,53|monster|IceGoblin|1058,4,100000ms,30000ms,Mob031-3::On1058
-031-3,97,291,42,22|monster|Moggun|1061,5,100000ms,30000ms,Mob031-3::On1061
-031-3,278,282,33,14|monster|IceGoblin|1058,5,100000ms,30000ms,Mob031-3::On1058
-031-3,98,214,39,44|monster|IceElement|1071,2,100000ms,30000ms,Mob031-3::On1071
-031-3,285,218,8,75|monster|IceElement|1071,2,100000ms,30000ms,Mob031-3::On1071
-031-3,283,217,41,64|monster|Bat|1017,15,100000ms,30000ms,Mob031-3::On1017
-031-3,282,237,63,20|monster|Moggun|1061,3,100000ms,30000ms,Mob031-3::On1061
-031-3,282,196,62,16|monster|Moggun|1061,3,100000ms,30000ms,Mob031-3::On1061
-031-3,229,226,27,34|monster|Yeti|1072,3,100000ms,30000ms,Mob031-3::On1072
-031-3,230,227,12,42|monster|IceGoblin|1058,5,100000ms,30000ms,Mob031-3::On1058
-031-3,209,199,12,17|monster|Yeti|1072,2,100000ms,30000ms,Mob031-3::On1072
-031-3,193,216,12,17|monster|Yeti|1072,1,100000ms,30000ms,Mob031-3::On1072
-031-3,213,282,66,43|monster|Bat|1017,5,100000ms,30000ms,Mob031-3::On1017
-031-3,213,282,66,43|monster|Pollett|1113,5,100000ms,30000ms,Mob031-3::On1113
-031-3,199,200,45,14|monster|Bat|1017,13,100000ms,30000ms,Mob031-3::On1017
-031-3,209,199,12,17|monster|Yeti|1072,2,100000ms,30000ms,Mob031-3::On1072
-031-3,234,141,18,19|monster|Yeti|1072,2,100000ms,30000ms,Mob031-3::On1072
-031-3,282,196,62,16|monster|Moggun|1061,3,100000ms,30000ms,Mob031-3::On1061
-031-3,212,159,62,16|monster|Moggun|1061,7,100000ms,30000ms,Mob031-3::On1061
-031-3,212,159,62,16|monster|Moggun|1061,7,100000ms,30000ms,Mob031-3::On1061
-031-3,212,130,62,16|monster|Moggun|1061,7,100000ms,30000ms,Mob031-3::On1061
-031-3,284,143,40,48|monster|Moggun|1061,7,100000ms,30000ms,Mob031-3::On1061
-031-3,283,84,36,31|monster|Bat|1017,15,100000ms,30000ms,Mob031-3::On1017
-031-3,283,84,36,31|monster|Bat|1017,15,100000ms,30000ms,Mob031-3::On1017
-031-3,274,81,15,32|monster|Yeti|1072,2,100000ms,30000ms,Mob031-3::On1072
-031-3,40,53,44,68|monster|Moggun|1061,10,100000ms,30000ms,Mob031-3::On1061
-031-3,120,160,85,30|monster|Yeti|1072,4,100000ms,30000ms,Mob031-3::On1072
-031-3,121,131,82,24|monster|Yeti|1072,8,100000ms,30000ms,Mob031-3::On1072
-031-3,107,130,25,26|monster|IceGoblin|1058,6,100000ms,30000ms,Mob031-3::On1058
-031-3,145,160,25,24|monster|IceGoblin|1058,6,100000ms,30000ms,Mob031-3::On1058
-031-3,94,167,25,24|monster|IceGoblin|1058,6,100000ms,30000ms,Mob031-3::On1058
-031-3,282,37,31,28|monster|IceElement|1071,5,100000ms,30000ms,Mob031-3::On1071
-031-3,213,36,64,32|monster|IceElement|1071,5,100000ms,30000ms,Mob031-3::On1071
-031-3,228,83,31,28|monster|IceElement|1071,3,100000ms,30000ms,Mob031-3::On1071
-031-3,283,138,15,13|monster|IceElement|1071,1,100000ms,30000ms,Mob031-3::On1071
-031-3,198,83,31,28|monster|IceElement|1071,3,100000ms,30000ms,Mob031-3::On1071
-031-3,214,75,25,26|monster|IceGoblin|1058,3,100000ms,30000ms,Mob031-3::On1058
-031-3,217,37,66,43|monster|Bat|1017,10,100000ms,30000ms,Mob031-3::On1017
-031-3,39,52,64,56|monster|Bat|1017,5,100000ms,30000ms,Mob031-3::On1017
-031-3,39,274,64,56|monster|Bat|1017,10,100000ms,30000ms,Mob031-3::On1017
-031-3,119,51,39,64|monster|Bat|1017,10,100000ms,30000ms,Mob031-3::On1017
-031-3,119,50,57,51|monster|IceElement|1071,5,100000ms,30000ms,Mob031-3::On1071
-031-3,120,79,20,17|monster|Yeti|1072,2,100000ms,30000ms,Mob031-3::On1072
-031-3,37,284,6,4|monster|WhiteSlime|1093,7,100000ms,30000ms,Mob031-3::On1093
-031-3,28,255,14,9|monster|BlueSlime|1091,2,100000ms,30000ms,Mob031-3::On1091
-031-3,212,277,14,9|monster|WhiteSlime|1093,7,100000ms,30000ms,Mob031-3::On1093
-031-3,289,295,6,4|monster|WhiteSlime|1093,7,100000ms,30000ms,Mob031-3::On1093
-031-3,292,288,14,9|monster|BlueSlime|1091,2,100000ms,30000ms,Mob031-3::On1091
-031-3,296,233,7,6|monster|WhiteSlime|1093,7,100000ms,30000ms,Mob031-3::On1093
-031-3,271,222,7,6|monster|WhiteSlime|1093,7,100000ms,30000ms,Mob031-3::On1093
-031-3,281,215,55,21|monster|BlueSlime|1091,5,100000ms,30000ms,Mob031-3::On1091
-031-3,126,35,6,5|monster|WhiteSlime|1093,7,100000ms,30000ms,Mob031-3::On1093
-031-3,143,124,34,22|monster|BlueSlime|1091,2,100000ms,30000ms,Mob031-3::On1091
-031-3,48,65,14,9|monster|WhiteSlime|1093,7,100000ms,30000ms,Mob031-3::On1093
-031-3,37,113,5,13|monster|BlueSlime|1091,1,100000ms,30000ms,Mob031-3::On1091
-031-3,136,227,14,9|monster|WhiteSlime|1093,7,100000ms,30000ms,Mob031-3::On1093
-031-3,152,218,13,17|monster|BlueSlime|1091,4,100000ms,30000ms,Mob031-3::On1091
-031-3,135,206,9,6|monster|WhiteSlime|1093,7,100000ms,30000ms,Mob031-3::On1093
-031-3,154,202,7,7|monster|WhiteSlime|1093,7,100000ms,30000ms,Mob031-3::On1093
-031-3,136,216,6,4|monster|BlueSlime|1091,2,100000ms,30000ms,Mob031-3::On1091
-031-3,112,276,6,4|monster|WhiteSlime|1093,7,100000ms,30000ms,Mob031-3::On1093
-031-3,143,294,6,4|monster|WhiteSlime|1093,7,100000ms,30000ms,Mob031-3::On1093
-031-3,149,268,6,4|monster|WhiteSlime|1093,7,100000ms,30000ms,Mob031-3::On1093
-031-3,136,264,6,4|monster|WhiteSlime|1093,7,100000ms,30000ms,Mob031-3::On1093
-031-3,157,283,6,4|monster|WhiteSlime|1093,7,100000ms,30000ms,Mob031-3::On1093
-031-3,139,264,25,19|monster|BlueSlime|1091,4,100000ms,30000ms,Mob031-3::On1091
-031-3,24,265,6,4|monster|WhiteSlime|1093,7,100000ms,30000ms,Mob031-3::On1093
-031-3,52,280,6,4|monster|WhiteSlime|1093,7,100000ms,30000ms,Mob031-3::On1093
-031-3,37,254,6,4|monster|WhiteSlime|1093,7,100000ms,30000ms,Mob031-3::On1093
-031-3,24,290,6,4|monster|WhiteSlime|1093,7,100000ms,30000ms,Mob031-3::On1093
-031-3,48,298,6,4|monster|WhiteSlime|1093,7,100000ms,30000ms,Mob031-3::On1093
-031-3,53,260,6,4|monster|WhiteSlime|1093,7,100000ms,30000ms,Mob031-3::On1093
-031-3,23,275,14,9|monster|BlueSlime|1091,2,100000ms,30000ms,Mob031-3::On1091
-031-3,37,272,14,9|monster|BlueSlime|1091,2,100000ms,30000ms,Mob031-3::On1091
-031-3,52,285,14,9|monster|BlueSlime|1091,2,100000ms,30000ms,Mob031-3::On1091
-
-
-031-3,0,0,0|script|Mob031-3|32767
-{
- end;
-
-On1017:
- set @mobID, 1017;
- callfunc "MobPoints";
- end;
-
-On1058:
- set @mobID, 1058;
- callfunc "MobPoints";
- end;
-
-On1061:
- set @mobID, 1061;
- callfunc "MobPoints";
- end;
-
-On1071:
- set @mobID, 1071;
- callfunc "MobPoints";
- end;
-
-On1072:
- set @mobID, 1072;
- callfunc "MobPoints";
- end;
-
-On1091:
- set @mobID, 1091;
- callfunc "MobPoints";
- end;
-
-On1093:
- set @mobID, 1093;
- callfunc "MobPoints";
- end;
-
-On1113:
- set @mobID, 1113;
- callfunc "MobPoints";
- end;
-}
+031-3,230,279,25,26|monster|IceGoblin|1058,5,100000ms,30000ms
+031-3,195,277,25,26|monster|IceGoblin|1058,3,100000ms,30000ms
+031-3,213,282,66,43|monster|Bat|1017,5,100000ms,30000ms
+031-3,37,213,27,23|monster|Yeti|1072,2,100000ms,30000ms
+031-3,35,212,27,23|monster|Bat|1017,11,100000ms,30000ms
+031-3,38,147,44,68|monster|Moggun|1061,19,100000ms,30000ms
+031-3,97,261,42,22|monster|Moggun|1061,5,100000ms,30000ms
+031-3,97,291,42,22|monster|Moggun|1061,5,100000ms,30000ms
+031-3,36,148,64,43|monster|Bat|1017,11,100000ms,30000ms
+031-3,97,277,22,42|monster|Bat|1017,11,100000ms,30000ms
+031-3,148,282,22,42|monster|Bat|1017,11,100000ms,30000ms
+031-3,145,293,25,26|monster|IceGoblin|1058,6,100000ms,30000ms
+031-3,98,214,39,44|monster|IceElement|1071,2,100000ms,30000ms
+031-3,99,214,25,26|monster|IceGoblin|1058,3,100000ms,30000ms
+031-3,198,144,29,53|monster|IceGoblin|1058,4,100000ms,30000ms
+031-3,97,291,42,22|monster|Moggun|1061,5,100000ms,30000ms
+031-3,278,282,33,14|monster|IceGoblin|1058,5,100000ms,30000ms
+031-3,98,214,39,44|monster|IceElement|1071,2,100000ms,30000ms
+031-3,285,218,8,75|monster|IceElement|1071,2,100000ms,30000ms
+031-3,283,217,41,64|monster|Bat|1017,15,100000ms,30000ms
+031-3,282,237,63,20|monster|Moggun|1061,3,100000ms,30000ms
+031-3,282,196,62,16|monster|Moggun|1061,3,100000ms,30000ms
+031-3,229,226,27,34|monster|Yeti|1072,3,100000ms,30000ms
+031-3,230,227,12,42|monster|IceGoblin|1058,5,100000ms,30000ms
+031-3,209,199,12,17|monster|Yeti|1072,2,100000ms,30000ms
+031-3,193,216,12,17|monster|Yeti|1072,1,100000ms,30000ms
+031-3,213,282,66,43|monster|Bat|1017,5,100000ms,30000ms
+031-3,213,282,66,43|monster|Pollett|1113,5,100000ms,30000ms
+031-3,199,200,45,14|monster|Bat|1017,13,100000ms,30000ms
+031-3,209,199,12,17|monster|Yeti|1072,2,100000ms,30000ms
+031-3,234,141,18,19|monster|Yeti|1072,2,100000ms,30000ms
+031-3,282,196,62,16|monster|Moggun|1061,3,100000ms,30000ms
+031-3,212,159,62,16|monster|Moggun|1061,7,100000ms,30000ms
+031-3,212,159,62,16|monster|Moggun|1061,7,100000ms,30000ms
+031-3,212,130,62,16|monster|Moggun|1061,7,100000ms,30000ms
+031-3,284,143,40,48|monster|Moggun|1061,7,100000ms,30000ms
+031-3,283,84,36,31|monster|Bat|1017,15,100000ms,30000ms
+031-3,283,84,36,31|monster|Bat|1017,15,100000ms,30000ms
+031-3,274,81,15,32|monster|Yeti|1072,2,100000ms,30000ms
+031-3,40,53,44,68|monster|Moggun|1061,10,100000ms,30000ms
+031-3,120,160,85,30|monster|Yeti|1072,4,100000ms,30000ms
+031-3,121,131,82,24|monster|Yeti|1072,8,100000ms,30000ms
+031-3,107,130,25,26|monster|IceGoblin|1058,6,100000ms,30000ms
+031-3,145,160,25,24|monster|IceGoblin|1058,6,100000ms,30000ms
+031-3,94,167,25,24|monster|IceGoblin|1058,6,100000ms,30000ms
+031-3,282,37,31,28|monster|IceElement|1071,5,100000ms,30000ms
+031-3,213,36,64,32|monster|IceElement|1071,5,100000ms,30000ms
+031-3,228,83,31,28|monster|IceElement|1071,3,100000ms,30000ms
+031-3,283,138,15,13|monster|IceElement|1071,1,100000ms,30000ms
+031-3,198,83,31,28|monster|IceElement|1071,3,100000ms,30000ms
+031-3,214,75,25,26|monster|IceGoblin|1058,3,100000ms,30000ms
+031-3,217,37,66,43|monster|Bat|1017,10,100000ms,30000ms
+031-3,39,52,64,56|monster|Bat|1017,5,100000ms,30000ms
+031-3,39,274,64,56|monster|Bat|1017,10,100000ms,30000ms
+031-3,119,51,39,64|monster|Bat|1017,10,100000ms,30000ms
+031-3,119,50,57,51|monster|IceElement|1071,5,100000ms,30000ms
+031-3,120,79,20,17|monster|Yeti|1072,2,100000ms,30000ms
+031-3,37,284,6,4|monster|WhiteSlime|1093,7,100000ms,30000ms
+031-3,28,255,14,9|monster|BlueSlime|1091,2,100000ms,30000ms
+031-3,212,277,14,9|monster|WhiteSlime|1093,7,100000ms,30000ms
+031-3,289,295,6,4|monster|WhiteSlime|1093,7,100000ms,30000ms
+031-3,292,288,14,9|monster|BlueSlime|1091,2,100000ms,30000ms
+031-3,296,233,7,6|monster|WhiteSlime|1093,7,100000ms,30000ms
+031-3,271,222,7,6|monster|WhiteSlime|1093,7,100000ms,30000ms
+031-3,281,215,55,21|monster|BlueSlime|1091,5,100000ms,30000ms
+031-3,126,35,6,5|monster|WhiteSlime|1093,7,100000ms,30000ms
+031-3,143,124,34,22|monster|BlueSlime|1091,2,100000ms,30000ms
+031-3,48,65,14,9|monster|WhiteSlime|1093,7,100000ms,30000ms
+031-3,37,113,5,13|monster|BlueSlime|1091,1,100000ms,30000ms
+031-3,136,227,14,9|monster|WhiteSlime|1093,7,100000ms,30000ms
+031-3,152,218,13,17|monster|BlueSlime|1091,4,100000ms,30000ms
+031-3,135,206,9,6|monster|WhiteSlime|1093,7,100000ms,30000ms
+031-3,154,202,7,7|monster|WhiteSlime|1093,7,100000ms,30000ms
+031-3,136,216,6,4|monster|BlueSlime|1091,2,100000ms,30000ms
+031-3,112,276,6,4|monster|WhiteSlime|1093,7,100000ms,30000ms
+031-3,143,294,6,4|monster|WhiteSlime|1093,7,100000ms,30000ms
+031-3,149,268,6,4|monster|WhiteSlime|1093,7,100000ms,30000ms
+031-3,136,264,6,4|monster|WhiteSlime|1093,7,100000ms,30000ms
+031-3,157,283,6,4|monster|WhiteSlime|1093,7,100000ms,30000ms
+031-3,139,264,25,19|monster|BlueSlime|1091,4,100000ms,30000ms
+031-3,24,265,6,4|monster|WhiteSlime|1093,7,100000ms,30000ms
+031-3,52,280,6,4|monster|WhiteSlime|1093,7,100000ms,30000ms
+031-3,37,254,6,4|monster|WhiteSlime|1093,7,100000ms,30000ms
+031-3,24,290,6,4|monster|WhiteSlime|1093,7,100000ms,30000ms
+031-3,48,298,6,4|monster|WhiteSlime|1093,7,100000ms,30000ms
+031-3,53,260,6,4|monster|WhiteSlime|1093,7,100000ms,30000ms
+031-3,23,275,14,9|monster|BlueSlime|1091,2,100000ms,30000ms
+031-3,37,272,14,9|monster|BlueSlime|1091,2,100000ms,30000ms
+031-3,52,285,14,9|monster|BlueSlime|1091,2,100000ms,30000ms
diff --git a/world/map/npc/031-3/_nodes.txt b/world/map/npc/031-3/_nodes.txt
new file mode 100644
index 00000000..38ed7558
--- /dev/null
+++ b/world/map/npc/031-3/_nodes.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Ice Labyrinth nodes
+
+// (no nodes)
diff --git a/world/map/npc/031-4/_import.txt b/world/map/npc/031-4/_import.txt
index 02089d01..250e5b20 100644
--- a/world/map/npc/031-4/_import.txt
+++ b/world/map/npc/031-4/_import.txt
@@ -2,6 +2,7 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 031-4
npc: npc/031-4/_mobs.txt
+npc: npc/031-4/_nodes.txt
npc: npc/031-4/_warps.txt
npc: npc/031-4/barrier.txt
npc: npc/031-4/cindyCave.txt
diff --git a/world/map/npc/031-4/_mobs.txt b/world/map/npc/031-4/_mobs.txt
index cc2f2d21..891a5cd7 100644
--- a/world/map/npc/031-4/_mobs.txt
+++ b/world/map/npc/031-4/_mobs.txt
@@ -1,9 +1,3 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Cindy Cave mobs
-
-
-031-4,0,0,0|script|Mob031-4|32767
-{
- end;
-}
diff --git a/world/map/npc/031-4/_nodes.txt b/world/map/npc/031-4/_nodes.txt
new file mode 100644
index 00000000..11486912
--- /dev/null
+++ b/world/map/npc/031-4/_nodes.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Cindy Cave nodes
+
+// (no nodes)
diff --git a/world/map/npc/031-4/cindyCave.txt b/world/map/npc/031-4/cindyCave.txt
index 33c3a16f..c97b166d 100644
--- a/world/map/npc/031-4/cindyCave.txt
+++ b/world/map/npc/031-4/cindyCave.txt
@@ -131,7 +131,7 @@ OnTimer5000:
L_Return_1:
set $@FIGHT_YETI_PLAYER_COUNT, 0;
- areatimer "031-4", 0, 0, 95, 91, 10, "Cindy::OnTick";
+ areatimer 0, "031-4", 0, 0, 95, 91, 10, "Cindy::OnTick";
end;
L_CaveLogic:
@@ -184,7 +184,7 @@ OnPetDeath:
end;
L_CleanUp:
- areatimer "031-4", 0, 0, 95, 91, 10, "Cindy::OnReward";
+ areatimer 0, "031-4", 0, 0, 95, 91, 10, "Cindy::OnReward";
set $@FIGHT_YETI_STATUS, 0;
set $@FIGHT_YETI_PLAYER_COUNT, 0;
set $@FIGHT_YETI_WAVE, 0;
diff --git a/world/map/npc/032-3/_import.txt b/world/map/npc/032-3/_import.txt
index 66d368cd..09f9448c 100644
--- a/world/map/npc/032-3/_import.txt
+++ b/world/map/npc/032-3/_import.txt
@@ -2,5 +2,6 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 032-3
npc: npc/032-3/_mobs.txt
+npc: npc/032-3/_nodes.txt
npc: npc/032-3/_warps.txt
npc: npc/032-3/mapflags.txt
diff --git a/world/map/npc/032-3/_mobs.txt b/world/map/npc/032-3/_mobs.txt
index 2e336d50..b84e45f3 100644
--- a/world/map/npc/032-3/_mobs.txt
+++ b/world/map/npc/032-3/_mobs.txt
@@ -1,64 +1,13 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Outback Cave mobs
-032-3,90,44,9,10|monster|Skeleton|1043,3,30000ms,100000ms,Mob032-3::On1043
-032-3,44,23,29,22|monster|MountainSnake|1026,7,30000ms,100000ms,Mob032-3::On1026
-032-3,125,46,35,75|monster|Snake|1010,13,30000ms,100000ms,Mob032-3::On1010
-032-3,80,44,9,10|monster|BlackScorpion|1009,5,30000ms,100000ms,Mob032-3::On1009
-032-3,85,33,9,10|monster|Spider|1012,5,30000ms,100000ms,Mob032-3::On1012
-032-3,83,18,37,9|monster|Archant|1060,8,30000ms,100000ms,Mob032-3::On1060
-032-3,78,76,24,21|monster|Archant|1060,8,30000ms,100000ms,Mob032-3::On1060
-032-3,25,76,24,21|monster|YellowSlime|1007,11,300000ms,1000000ms,Mob032-3::On1007
-032-3,46,51,34,18|monster|CaveMaggot|1056,11,30000ms,100000ms,Mob032-3::On1056
-032-3,0,0,0,0|monster|Bat|1017,25,30000ms,100000ms,Mob032-3::On1017
-
-
-032-3,0,0,0|script|Mob032-3|32767
-{
- end;
-
-On1007:
- set @mobID, 1007;
- callfunc "MobPoints";
- end;
-
-On1009:
- set @mobID, 1009;
- callfunc "MobPoints";
- end;
-
-On1010:
- set @mobID, 1010;
- callfunc "MobPoints";
- end;
-
-On1012:
- set @mobID, 1012;
- callfunc "MobPoints";
- end;
-
-On1017:
- set @mobID, 1017;
- callfunc "MobPoints";
- end;
-
-On1026:
- set @mobID, 1026;
- callfunc "MobPoints";
- end;
-
-On1043:
- set @mobID, 1043;
- callfunc "MobPoints";
- end;
-
-On1056:
- set @mobID, 1056;
- callfunc "MobPoints";
- end;
-
-On1060:
- set @mobID, 1060;
- callfunc "MobPoints";
- end;
-}
+032-3,90,44,9,10|monster|Skeleton|1043,3,30000ms,100000ms
+032-3,44,23,29,22|monster|MountainSnake|1026,7,30000ms,100000ms
+032-3,125,46,35,75|monster|Snake|1010,13,30000ms,100000ms
+032-3,80,44,9,10|monster|BlackScorpion|1009,5,30000ms,100000ms
+032-3,85,33,9,10|monster|Spider|1012,5,30000ms,100000ms
+032-3,83,18,37,9|monster|Archant|1060,8,30000ms,100000ms
+032-3,78,76,24,21|monster|Archant|1060,8,30000ms,100000ms
+032-3,25,76,24,21|monster|YellowSlime|1007,11,300000ms,1000000ms
+032-3,46,51,34,18|monster|CaveMaggot|1056,11,30000ms,100000ms
+032-3,0,0,0,0|monster|Bat|1017,25,30000ms,100000ms
diff --git a/world/map/npc/032-3/_nodes.txt b/world/map/npc/032-3/_nodes.txt
new file mode 100644
index 00000000..87034821
--- /dev/null
+++ b/world/map/npc/032-3/_nodes.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Outback Cave nodes
+
+// (no nodes)
diff --git a/world/map/npc/033-1/_import.txt b/world/map/npc/033-1/_import.txt
index 6205545e..60a3096a 100644
--- a/world/map/npc/033-1/_import.txt
+++ b/world/map/npc/033-1/_import.txt
@@ -2,6 +2,7 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 033-1
npc: npc/033-1/_mobs.txt
+npc: npc/033-1/_nodes.txt
npc: npc/033-1/_warps.txt
npc: npc/033-1/backDoor.txt
npc: npc/033-1/barbarianinit.txt
diff --git a/world/map/npc/033-1/_mobs.txt b/world/map/npc/033-1/_mobs.txt
index afbd35ed..2eb36796 100644
--- a/world/map/npc/033-1/_mobs.txt
+++ b/world/map/npc/033-1/_mobs.txt
@@ -1,33 +1,7 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// snow Path mobs
-033-1,73,49,10,18|monster|Wolvern|1090,2,100000ms,30000ms,Mob033-1::On1090
-033-1,33,38,15,49|monster|Reinboo|1094,3,100000ms,30000ms,Mob033-1::On1094
-033-1,56,87,50,42|monster|Squirrel|1038,15,100000ms,30000ms,Mob033-1::On1038
-033-1,0,0,0,0|monster|WhiteBell|1095,3,100000ms,30000ms,Mob033-1::On1095
-
-
-033-1,0,0,0|script|Mob033-1|32767
-{
- end;
-
-On1038:
- set @mobID, 1038;
- callfunc "MobPoints";
- end;
-
-On1090:
- set @mobID, 1090;
- callfunc "MobPoints";
- end;
-
-On1094:
- set @mobID, 1094;
- callfunc "MobPoints";
- end;
-
-On1095:
- set @mobID, 1095;
- callfunc "MobPoints";
- end;
-}
+033-1,73,49,10,18|monster|Wolvern|1090,2,100000ms,30000ms
+033-1,33,38,15,49|monster|Reinboo|1094,3,100000ms,30000ms
+033-1,56,87,50,42|monster|Squirrel|1038,15,100000ms,30000ms
+033-1,0,0,0,0|monster|WhiteBell|1095,3,100000ms,30000ms
diff --git a/world/map/npc/033-1/_nodes.txt b/world/map/npc/033-1/_nodes.txt
new file mode 100644
index 00000000..3842473e
--- /dev/null
+++ b/world/map/npc/033-1/_nodes.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// snow Path nodes
+
+// (no nodes)
diff --git a/world/map/npc/033-1/kimarr.txt b/world/map/npc/033-1/kimarr.txt
index 6650198f..cbe2b289 100644
--- a/world/map/npc/033-1/kimarr.txt
+++ b/world/map/npc/033-1/kimarr.txt
@@ -196,7 +196,7 @@ L_Action:
goto L_Died;
// Checking if there is more than 1 player in the fight area
if (getareausers("033-1", 79, 28, 88, 42) > 1)
- areatimer "033-1", 79, 28, 88, 42, 10, "Kimarr::OnTooMany";
+ areatimer 0, "033-1", 79, 28, 88, 42, 10, "Kimarr::OnTooMany";
if ($@Fluffy_Time == 180)
npctalk strnpcinfo(0), strcharinfo(0) + ", you have 3 minutes.";
diff --git a/world/map/npc/034-1/_import.txt b/world/map/npc/034-1/_import.txt
index ae229c8c..fab02ab2 100644
--- a/world/map/npc/034-1/_import.txt
+++ b/world/map/npc/034-1/_import.txt
@@ -2,6 +2,7 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 034-1
npc: npc/034-1/_mobs.txt
+npc: npc/034-1/_nodes.txt
npc: npc/034-1/_warps.txt
npc: npc/034-1/ambushs.txt
npc: npc/034-1/mapflags.txt
diff --git a/world/map/npc/034-1/_mobs.txt b/world/map/npc/034-1/_mobs.txt
index e02e496b..575d0220 100644
--- a/world/map/npc/034-1/_mobs.txt
+++ b/world/map/npc/034-1/_mobs.txt
@@ -1,45 +1,9 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Snow Forest mobs
-034-1,0,0,0,0|monster|Reinboo|1094,4,100000ms,30000ms,Mob034-1::On1094
-034-1,0,0,0,0|monster|Fluffy|1020,25,100000ms,30000ms,Mob034-1::On1020
-034-1,0,0,0,0|monster|WhiteBell|1095,5,100000ms,30000ms,Mob034-1::On1095
-034-1,0,0,0,0|monster|Squirrel|1038,25,100000ms,30000ms,Mob034-1::On1038
-034-1,0,0,0,0|monster|Santaboo|1112,4,100000ms,30000ms,Mob034-1::On1112
-034-1,1,1,0,0|monster|IceGoblin|1058,25,100000ms,30000ms,Mob034-1::On1058
-
-
-034-1,0,0,0|script|Mob034-1|32767
-{
- end;
-
-On1020:
- set @mobID, 1020;
- callfunc "MobPoints";
- end;
-
-On1038:
- set @mobID, 1038;
- callfunc "MobPoints";
- end;
-
-On1058:
- set @mobID, 1058;
- callfunc "MobPoints";
- end;
-
-On1094:
- set @mobID, 1094;
- callfunc "MobPoints";
- end;
-
-On1095:
- set @mobID, 1095;
- callfunc "MobPoints";
- end;
-
-On1112:
- set @mobID, 1112;
- callfunc "MobPoints";
- end;
-}
+034-1,0,0,0,0|monster|Reinboo|1094,4,100000ms,30000ms
+034-1,0,0,0,0|monster|Fluffy|1020,25,100000ms,30000ms
+034-1,0,0,0,0|monster|WhiteBell|1095,5,100000ms,30000ms
+034-1,0,0,0,0|monster|Squirrel|1038,25,100000ms,30000ms
+034-1,0,0,0,0|monster|Santaboo|1112,4,100000ms,30000ms
+034-1,1,1,0,0|monster|IceGoblin|1058,25,100000ms,30000ms
diff --git a/world/map/npc/034-1/_nodes.txt b/world/map/npc/034-1/_nodes.txt
new file mode 100644
index 00000000..99c4688b
--- /dev/null
+++ b/world/map/npc/034-1/_nodes.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Snow Forest nodes
+
+// (no nodes)
diff --git a/world/map/npc/034-2/_import.txt b/world/map/npc/034-2/_import.txt
index 29e7a602..47130e2d 100644
--- a/world/map/npc/034-2/_import.txt
+++ b/world/map/npc/034-2/_import.txt
@@ -2,5 +2,6 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 034-2
npc: npc/034-2/_mobs.txt
+npc: npc/034-2/_nodes.txt
npc: npc/034-2/_warps.txt
npc: npc/034-2/mapflags.txt
diff --git a/world/map/npc/034-2/_mobs.txt b/world/map/npc/034-2/_mobs.txt
index 709fcb08..9045b1c4 100644
--- a/world/map/npc/034-2/_mobs.txt
+++ b/world/map/npc/034-2/_mobs.txt
@@ -1,9 +1,3 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Trappers Huts mobs
-
-
-034-2,0,0,0|script|Mob034-2|32767
-{
- end;
-}
diff --git a/world/map/npc/034-2/_nodes.txt b/world/map/npc/034-2/_nodes.txt
new file mode 100644
index 00000000..c92382fc
--- /dev/null
+++ b/world/map/npc/034-2/_nodes.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Trappers Huts nodes
+
+// (no nodes)
diff --git a/world/map/npc/035-2/_import.txt b/world/map/npc/035-2/_import.txt
index a46f42b1..78b7188c 100644
--- a/world/map/npc/035-2/_import.txt
+++ b/world/map/npc/035-2/_import.txt
@@ -2,6 +2,7 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 035-2
npc: npc/035-2/_mobs.txt
+npc: npc/035-2/_nodes.txt
npc: npc/035-2/_warps.txt
npc: npc/035-2/casino.txt
npc: npc/035-2/emblems.txt
diff --git a/world/map/npc/035-2/_mobs.txt b/world/map/npc/035-2/_mobs.txt
index 899a8d04..bb3f2eca 100644
--- a/world/map/npc/035-2/_mobs.txt
+++ b/world/map/npc/035-2/_mobs.txt
@@ -1,9 +1,3 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Koga - Main mobs
-
-
-035-2,0,0,0|script|Mob035-2|32767
-{
- end;
-}
diff --git a/world/map/npc/035-2/_nodes.txt b/world/map/npc/035-2/_nodes.txt
new file mode 100644
index 00000000..7002a966
--- /dev/null
+++ b/world/map/npc/035-2/_nodes.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Koga - Main nodes
+
+// (no nodes)
diff --git a/world/map/npc/036-2/_import.txt b/world/map/npc/036-2/_import.txt
index dd908e52..79ee898b 100644
--- a/world/map/npc/036-2/_import.txt
+++ b/world/map/npc/036-2/_import.txt
@@ -2,6 +2,7 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 036-2
npc: npc/036-2/_mobs.txt
+npc: npc/036-2/_nodes.txt
npc: npc/036-2/_warps.txt
npc: npc/036-2/casino.txt
npc: npc/036-2/emblems.txt
diff --git a/world/map/npc/036-2/_mobs.txt b/world/map/npc/036-2/_mobs.txt
index 0cebfbc8..483d68b1 100644
--- a/world/map/npc/036-2/_mobs.txt
+++ b/world/map/npc/036-2/_mobs.txt
@@ -1,9 +1,3 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Koga - Candor mobs
-
-
-036-2,0,0,0|script|Mob036-2|32767
-{
- end;
-}
diff --git a/world/map/npc/036-2/_nodes.txt b/world/map/npc/036-2/_nodes.txt
new file mode 100644
index 00000000..20ea08f2
--- /dev/null
+++ b/world/map/npc/036-2/_nodes.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Koga - Candor nodes
+
+// (no nodes)
diff --git a/world/map/npc/043-3/_import.txt b/world/map/npc/043-3/_import.txt
index d915e2d0..b4b99268 100644
--- a/world/map/npc/043-3/_import.txt
+++ b/world/map/npc/043-3/_import.txt
@@ -2,5 +2,6 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 043-3
npc: npc/043-3/_mobs.txt
+npc: npc/043-3/_nodes.txt
npc: npc/043-3/_warps.txt
npc: npc/043-3/mapflags.txt
diff --git a/world/map/npc/043-3/_mobs.txt b/world/map/npc/043-3/_mobs.txt
index 085615a4..772c8921 100644
--- a/world/map/npc/043-3/_mobs.txt
+++ b/world/map/npc/043-3/_mobs.txt
@@ -1,43 +1,12 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Sandy Dungeon Level 1 mobs
-043-3,39,45,24,17|monster|CaveMaggot|1056,6,20000ms,20000ms,Mob043-3::On1056
-043-3,44,60,24,17|monster|CaveMaggot|1056,6,20000ms,20000ms,Mob043-3::On1056
-043-3,41,96,34,26|monster|CaveMaggot|1056,10,20000ms,20000ms,Mob043-3::On1056
-043-3,52,91,6,7|monster|AngryScorpion|1057,5,30000ms,30000ms,Mob043-3::On1057
-043-3,102,116,26,19|monster|AngryFireGoblin|1108,10,30000ms,30000ms,Mob043-3::On1108
-043-3,33,99,6,7|monster|AngryScorpion|1057,5,30000ms,30000ms,Mob043-3::On1057
-043-3,116,78,25,19|monster|AngryFireGoblin|1108,8,30000ms,30000ms,Mob043-3::On1108
-043-3,113,47,30,22|monster|RedSlime|1008,15,45000ms,35000ms,Mob043-3::On1008
-043-3,94,44,40,18|monster|GreenSlime|1005,5,30000ms,15000ms,Mob043-3::On1005
-
-
-043-3,0,0,0|script|Mob043-3|32767
-{
- end;
-
-On1005:
- set @mobID, 1005;
- callfunc "MobPoints";
- end;
-
-On1008:
- set @mobID, 1008;
- callfunc "MobPoints";
- end;
-
-On1056:
- set @mobID, 1056;
- callfunc "MobPoints";
- end;
-
-On1057:
- set @mobID, 1057;
- callfunc "MobPoints";
- end;
-
-On1108:
- set @mobID, 1108;
- callfunc "MobPoints";
- end;
-}
+043-3,39,45,24,17|monster|CaveMaggot|1056,6,20000ms,20000ms
+043-3,44,60,24,17|monster|CaveMaggot|1056,6,20000ms,20000ms
+043-3,41,96,34,26|monster|CaveMaggot|1056,10,20000ms,20000ms
+043-3,52,91,6,7|monster|AngryScorpion|1057,5,30000ms,30000ms
+043-3,102,116,26,19|monster|AngryFireGoblin|1108,10,30000ms,30000ms
+043-3,33,99,6,7|monster|AngryScorpion|1057,5,30000ms,30000ms
+043-3,116,78,25,19|monster|AngryFireGoblin|1108,8,30000ms,30000ms
+043-3,113,47,30,22|monster|RedSlime|1008,15,45000ms,35000ms
+043-3,94,44,40,18|monster|GreenSlime|1005,5,30000ms,15000ms
diff --git a/world/map/npc/043-3/_nodes.txt b/world/map/npc/043-3/_nodes.txt
new file mode 100644
index 00000000..9b7b7c4e
--- /dev/null
+++ b/world/map/npc/043-3/_nodes.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Sandy Dungeon Level 1 nodes
+
+// (no nodes)
diff --git a/world/map/npc/043-4/_import.txt b/world/map/npc/043-4/_import.txt
index a7200a7e..83403eaf 100644
--- a/world/map/npc/043-4/_import.txt
+++ b/world/map/npc/043-4/_import.txt
@@ -2,5 +2,6 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 043-4
npc: npc/043-4/_mobs.txt
+npc: npc/043-4/_nodes.txt
npc: npc/043-4/_warps.txt
npc: npc/043-4/mapflags.txt
diff --git a/world/map/npc/043-4/_mobs.txt b/world/map/npc/043-4/_mobs.txt
index a06642d0..ae7678e6 100644
--- a/world/map/npc/043-4/_mobs.txt
+++ b/world/map/npc/043-4/_mobs.txt
@@ -1,61 +1,25 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Sandy Dungeon Level 2 mobs
-043-4,139,163,7,6|monster|Terranite|1062,2,240000ms,120000ms,Mob043-4::On1062
-043-4,133,45,14,16|monster|UndeadTroll|1117,4,100000ms,50000ms,Mob043-4::On1117
-043-4,91,139,11,10|monster|UndeadTroll|1117,2,100000ms,50000ms,Mob043-4::On1117
-043-4,35,120,10,11|monster|UndeadTroll|1117,2,100000ms,50000ms,Mob043-4::On1117
-043-4,43,143,12,11|monster|UndeadWitch|1116,2,120000ms,60000ms,Mob043-4::On1116
-043-4,102,153,9,9|monster|UndeadWitch|1116,2,120000ms,60000ms,Mob043-4::On1116
-043-4,142,159,14,12|monster|UndeadWitch|1116,2,120000ms,60000ms,Mob043-4::On1116
-043-4,150,33,16,15|monster|UndeadWitch|1116,1,120000ms,60000ms,Mob043-4::On1116
-043-4,103,54,8,23|monster|UndeadTroll|1117,3,100000ms,50000ms,Mob043-4::On1117
-043-4,47,38,20,10|monster|Troll|1054,7,100000ms,50000ms,Mob043-4::On1054
-043-4,98,85,8,15|monster|Snake|1010,5,100000ms,50000ms,Mob043-4::On1010
-043-4,104,57,15,27|monster|Troll|1054,7,100000ms,50000ms,Mob043-4::On1054
-043-4,89,64,9,11|monster|BlackScorpion|1009,5,100000ms,50000ms,Mob043-4::On1009
-043-4,143,46,32,28|monster|Troll|1054,7,100000ms,50000ms,Mob043-4::On1054
-043-4,154,106,26,29|monster|BlackScorpion|1009,8,100000ms,50000ms,Mob043-4::On1009
-043-4,162,77,15,23|monster|Snake|1010,6,100000ms,50000ms,Mob043-4::On1010
-043-4,152,143,11,10|monster|BlackScorpion|1009,6,100000ms,50000ms,Mob043-4::On1009
-043-4,159,161,10,8|monster|Snake|1010,6,100000ms,50000ms,Mob043-4::On1010
-043-4,98,138,21,21|monster|Troll|1054,5,100000ms,50000ms,Mob043-4::On1054
-043-4,45,106,18,25|monster|Troll|1054,5,100000ms,50000ms,Mob043-4::On1054
-043-4,39,138,19,17|monster|BlackScorpion|1009,5,100000ms,50000ms,Mob043-4::On1009
-043-4,133,123,30,23|monster|Troll|1054,3,100000ms,50000ms,Mob043-4::On1054
-
-
-043-4,0,0,0|script|Mob043-4|32767
-{
- end;
-
-On1009:
- set @mobID, 1009;
- callfunc "MobPoints";
- end;
-
-On1010:
- set @mobID, 1010;
- callfunc "MobPoints";
- end;
-
-On1054:
- set @mobID, 1054;
- callfunc "MobPoints";
- end;
-
-On1062:
- set @mobID, 1062;
- callfunc "MobPoints";
- end;
-
-On1116:
- set @mobID, 1116;
- callfunc "MobPoints";
- end;
-
-On1117:
- set @mobID, 1117;
- callfunc "MobPoints";
- end;
-}
+043-4,139,163,7,6|monster|Terranite|1062,2,240000ms,120000ms
+043-4,133,45,14,16|monster|UndeadTroll|1117,4,100000ms,50000ms
+043-4,91,139,11,10|monster|UndeadTroll|1117,2,100000ms,50000ms
+043-4,35,120,10,11|monster|UndeadTroll|1117,2,100000ms,50000ms
+043-4,43,143,12,11|monster|UndeadWitch|1116,2,120000ms,60000ms
+043-4,102,153,9,9|monster|UndeadWitch|1116,2,120000ms,60000ms
+043-4,142,159,14,12|monster|UndeadWitch|1116,2,120000ms,60000ms
+043-4,150,33,16,15|monster|UndeadWitch|1116,1,120000ms,60000ms
+043-4,103,54,8,23|monster|UndeadTroll|1117,3,100000ms,50000ms
+043-4,47,38,20,10|monster|Troll|1054,7,100000ms,50000ms
+043-4,98,85,8,15|monster|Snake|1010,5,100000ms,50000ms
+043-4,104,57,15,27|monster|Troll|1054,7,100000ms,50000ms
+043-4,89,64,9,11|monster|BlackScorpion|1009,5,100000ms,50000ms
+043-4,143,46,32,28|monster|Troll|1054,7,100000ms,50000ms
+043-4,154,106,26,29|monster|BlackScorpion|1009,8,100000ms,50000ms
+043-4,162,77,15,23|monster|Snake|1010,6,100000ms,50000ms
+043-4,152,143,11,10|monster|BlackScorpion|1009,6,100000ms,50000ms
+043-4,159,161,10,8|monster|Snake|1010,6,100000ms,50000ms
+043-4,98,138,21,21|monster|Troll|1054,5,100000ms,50000ms
+043-4,45,106,18,25|monster|Troll|1054,5,100000ms,50000ms
+043-4,39,138,19,17|monster|BlackScorpion|1009,5,100000ms,50000ms
+043-4,133,123,30,23|monster|Troll|1054,3,100000ms,50000ms
diff --git a/world/map/npc/043-4/_nodes.txt b/world/map/npc/043-4/_nodes.txt
new file mode 100644
index 00000000..f334a483
--- /dev/null
+++ b/world/map/npc/043-4/_nodes.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Sandy Dungeon Level 2 nodes
+
+// (no nodes)
diff --git a/world/map/npc/045-1/_import.txt b/world/map/npc/045-1/_import.txt
index a9101910..591b3e37 100644
--- a/world/map/npc/045-1/_import.txt
+++ b/world/map/npc/045-1/_import.txt
@@ -2,5 +2,6 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 045-1
npc: npc/045-1/_mobs.txt
+npc: npc/045-1/_nodes.txt
npc: npc/045-1/_warps.txt
npc: npc/045-1/mapflags.txt
diff --git a/world/map/npc/045-1/_mobs.txt b/world/map/npc/045-1/_mobs.txt
index 37357556..f8a3433c 100644
--- a/world/map/npc/045-1/_mobs.txt
+++ b/world/map/npc/045-1/_mobs.txt
@@ -1,54 +1,18 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Deep Snow Forest mobs
-045-1,102,122,23,22|monster|Wolvern|1090,10,100000ms,30000ms,Mob045-1::On1090
-045-1,98,77,23,22|monster|Wolvern|1090,5,100000ms,30000ms,Mob045-1::On1090
-045-1,147,63,23,22|monster|Wolvern|1090,5,100000ms,30000ms,Mob045-1::On1090
-045-1,60,97,23,22|monster|Wolvern|1090,5,100000ms,30000ms,Mob045-1::On1090
-045-1,106,44,23,22|monster|Wolvern|1090,5,100000ms,30000ms,Mob045-1::On1090
-045-1,133,93,23,22|monster|Wolvern|1090,5,100000ms,30000ms,Mob045-1::On1090
-045-1,38,76,18,15|monster|Wolvern|1090,5,100000ms,30000ms,Mob045-1::On1090
-045-1,60,59,18,15|monster|Wolvern|1090,5,100000ms,30000ms,Mob045-1::On1090
-045-1,0,0,0,0|monster|Squirrel|1038,40,100000ms,30000ms,Mob045-1::On1038
-045-1,0,0,0,0|monster|Reinboo|1094,30,100000ms,30000ms,Mob045-1::On1094
-045-1,0,0,0,0|monster|Fluffy|1020,40,100000ms,30000ms,Mob045-1::On1020
-045-1,0,0,0,0|monster|WhiteBell|1095,5,100000ms,30000ms,Mob045-1::On1095
-045-1,47,145,25,25|monster|IceGoblin|1058,4,100000ms,30000ms,Mob045-1::On1058
-045-1,150,126,25,24|monster|IceGoblin|1058,4,100000ms,30000ms,Mob045-1::On1058
-045-1,104,149,79,10|monster|IceGoblin|1058,4,100000ms,30000ms,Mob045-1::On1058
-
-
-045-1,0,0,0|script|Mob045-1|32767
-{
- end;
-
-On1020:
- set @mobID, 1020;
- callfunc "MobPoints";
- end;
-
-On1038:
- set @mobID, 1038;
- callfunc "MobPoints";
- end;
-
-On1058:
- set @mobID, 1058;
- callfunc "MobPoints";
- end;
-
-On1090:
- set @mobID, 1090;
- callfunc "MobPoints";
- end;
-
-On1094:
- set @mobID, 1094;
- callfunc "MobPoints";
- end;
-
-On1095:
- set @mobID, 1095;
- callfunc "MobPoints";
- end;
-}
+045-1,102,122,23,22|monster|Wolvern|1090,10,100000ms,30000ms
+045-1,98,77,23,22|monster|Wolvern|1090,5,100000ms,30000ms
+045-1,147,63,23,22|monster|Wolvern|1090,5,100000ms,30000ms
+045-1,60,97,23,22|monster|Wolvern|1090,5,100000ms,30000ms
+045-1,106,44,23,22|monster|Wolvern|1090,5,100000ms,30000ms
+045-1,133,93,23,22|monster|Wolvern|1090,5,100000ms,30000ms
+045-1,38,76,18,15|monster|Wolvern|1090,5,100000ms,30000ms
+045-1,60,59,18,15|monster|Wolvern|1090,5,100000ms,30000ms
+045-1,0,0,0,0|monster|Squirrel|1038,40,100000ms,30000ms
+045-1,0,0,0,0|monster|Reinboo|1094,30,100000ms,30000ms
+045-1,0,0,0,0|monster|Fluffy|1020,40,100000ms,30000ms
+045-1,0,0,0,0|monster|WhiteBell|1095,5,100000ms,30000ms
+045-1,47,145,25,25|monster|IceGoblin|1058,4,100000ms,30000ms
+045-1,150,126,25,24|monster|IceGoblin|1058,4,100000ms,30000ms
+045-1,104,149,79,10|monster|IceGoblin|1058,4,100000ms,30000ms
diff --git a/world/map/npc/045-1/_nodes.txt b/world/map/npc/045-1/_nodes.txt
new file mode 100644
index 00000000..9ef28c87
--- /dev/null
+++ b/world/map/npc/045-1/_nodes.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Deep Snow Forest nodes
+
+// (no nodes)
diff --git a/world/map/npc/046-1/_import.txt b/world/map/npc/046-1/_import.txt
index 9c11acb7..2700ea85 100644
--- a/world/map/npc/046-1/_import.txt
+++ b/world/map/npc/046-1/_import.txt
@@ -2,5 +2,6 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 046-1
npc: npc/046-1/_mobs.txt
+npc: npc/046-1/_nodes.txt
npc: npc/046-1/_warps.txt
npc: npc/046-1/mapflags.txt
diff --git a/world/map/npc/046-1/_mobs.txt b/world/map/npc/046-1/_mobs.txt
index d5551ecd..919cca57 100644
--- a/world/map/npc/046-1/_mobs.txt
+++ b/world/map/npc/046-1/_mobs.txt
@@ -1,55 +1,14 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Rock Plateau mobs
-046-1,0,7,0,0|monster|Reinboo|1094,40,100000ms,30000ms,Mob046-1::On1094
-046-1,0,7,0,0|monster|Fluffy|1020,50,100000ms,30000ms,Mob046-1::On1020
-046-1,0,7,0,0|monster|Squirrel|1038,50,100000ms,30000ms,Mob046-1::On1038
-046-1,44,35,52,20|monster|Moggun|1061,12,100000ms,30000ms,Mob046-1::On1061
-046-1,0,7,0,0|monster|Yeti|1072,2,100000ms,30000ms,Mob046-1::On1072
-046-1,87,101,23,13|monster|Wolvern|1090,5,100000ms,30000ms,Mob046-1::On1090
-046-1,0,7,0,0|monster|WhiteBell|1095,9,100000ms,30000ms,Mob046-1::On1095
-046-1,72,59,15,12|monster|Wolvern|1090,2,100000ms,30000ms,Mob046-1::On1090
-046-1,36,112,10,9|monster|Wolvern|1090,2,100000ms,30000ms,Mob046-1::On1090
-046-1,115,40,45,33|monster|Wolvern|1090,7,100000ms,30000ms,Mob046-1::On1090
-046-1,145,67,10,9|monster|Wolvern|1090,2,100000ms,30000ms,Mob046-1::On1090
-
-
-046-1,0,0,0|script|Mob046-1|32767
-{
- end;
-
-On1020:
- set @mobID, 1020;
- callfunc "MobPoints";
- end;
-
-On1038:
- set @mobID, 1038;
- callfunc "MobPoints";
- end;
-
-On1061:
- set @mobID, 1061;
- callfunc "MobPoints";
- end;
-
-On1072:
- set @mobID, 1072;
- callfunc "MobPoints";
- end;
-
-On1090:
- set @mobID, 1090;
- callfunc "MobPoints";
- end;
-
-On1094:
- set @mobID, 1094;
- callfunc "MobPoints";
- end;
-
-On1095:
- set @mobID, 1095;
- callfunc "MobPoints";
- end;
-}
+046-1,0,7,0,0|monster|Reinboo|1094,40,100000ms,30000ms
+046-1,0,7,0,0|monster|Fluffy|1020,50,100000ms,30000ms
+046-1,0,7,0,0|monster|Squirrel|1038,50,100000ms,30000ms
+046-1,44,35,52,20|monster|Moggun|1061,12,100000ms,30000ms
+046-1,0,7,0,0|monster|Yeti|1072,2,100000ms,30000ms
+046-1,87,101,23,13|monster|Wolvern|1090,5,100000ms,30000ms
+046-1,0,7,0,0|monster|WhiteBell|1095,9,100000ms,30000ms
+046-1,72,59,15,12|monster|Wolvern|1090,2,100000ms,30000ms
+046-1,36,112,10,9|monster|Wolvern|1090,2,100000ms,30000ms
+046-1,115,40,45,33|monster|Wolvern|1090,7,100000ms,30000ms
+046-1,145,67,10,9|monster|Wolvern|1090,2,100000ms,30000ms
diff --git a/world/map/npc/046-1/_nodes.txt b/world/map/npc/046-1/_nodes.txt
new file mode 100644
index 00000000..9075a159
--- /dev/null
+++ b/world/map/npc/046-1/_nodes.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Rock Plateau nodes
+
+// (no nodes)
diff --git a/world/map/npc/046-3/_import.txt b/world/map/npc/046-3/_import.txt
index 24769cc4..d06b31c5 100644
--- a/world/map/npc/046-3/_import.txt
+++ b/world/map/npc/046-3/_import.txt
@@ -2,5 +2,6 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 046-3
npc: npc/046-3/_mobs.txt
+npc: npc/046-3/_nodes.txt
npc: npc/046-3/_warps.txt
npc: npc/046-3/mapflags.txt
diff --git a/world/map/npc/046-3/_mobs.txt b/world/map/npc/046-3/_mobs.txt
index 95c498ed..d75b5f5a 100644
--- a/world/map/npc/046-3/_mobs.txt
+++ b/world/map/npc/046-3/_mobs.txt
@@ -1,54 +1,18 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Frosty Underground mobs
-046-3,68,101,12,8|monster|Yeti|1072,2,100000ms,30000ms,Mob046-3::On1072
-046-3,0,0,0,0|monster|IceGoblin|1058,20,100000ms,30000ms,Mob046-3::On1058
-046-3,55,61,25,26|monster|Moggun|1061,14,100000ms,30000ms,Mob046-3::On1061
-046-3,119,104,5,4|monster|IceElement|1071,1,100000ms,30000ms,Mob046-3::On1071
-046-3,132,71,9,7|monster|WhiteSlime|1093,4,100000ms,30000ms,Mob046-3::On1093
-046-3,107,85,14,9|monster|BlueSlime|1091,2,100000ms,30000ms,Mob046-3::On1091
-046-3,98,77,6,4|monster|WhiteSlime|1093,4,100000ms,30000ms,Mob046-3::On1093
-046-3,70,82,6,4|monster|WhiteSlime|1093,6,100000ms,30000ms,Mob046-3::On1093
-046-3,106,34,6,4|monster|WhiteSlime|1093,4,100000ms,30000ms,Mob046-3::On1093
-046-3,33,37,6,4|monster|WhiteSlime|1093,4,100000ms,30000ms,Mob046-3::On1093
-046-3,144,105,14,9|monster|BlueSlime|1091,2,100000ms,30000ms,Mob046-3::On1091
-046-3,152,55,14,9|monster|BlueSlime|1091,2,100000ms,30000ms,Mob046-3::On1091
-046-3,84,53,14,9|monster|BlueSlime|1091,2,100000ms,30000ms,Mob046-3::On1091
-046-3,47,23,15,10|monster|IceElement|1071,2,100000ms,30000ms,Mob046-3::On1071
-046-3,113,48,12,8|monster|Yeti|1072,2,100000ms,30000ms,Mob046-3::On1072
-
-
-046-3,0,0,0|script|Mob046-3|32767
-{
- end;
-
-On1058:
- set @mobID, 1058;
- callfunc "MobPoints";
- end;
-
-On1061:
- set @mobID, 1061;
- callfunc "MobPoints";
- end;
-
-On1071:
- set @mobID, 1071;
- callfunc "MobPoints";
- end;
-
-On1072:
- set @mobID, 1072;
- callfunc "MobPoints";
- end;
-
-On1091:
- set @mobID, 1091;
- callfunc "MobPoints";
- end;
-
-On1093:
- set @mobID, 1093;
- callfunc "MobPoints";
- end;
-}
+046-3,68,101,12,8|monster|Yeti|1072,2,100000ms,30000ms
+046-3,0,0,0,0|monster|IceGoblin|1058,20,100000ms,30000ms
+046-3,55,61,25,26|monster|Moggun|1061,14,100000ms,30000ms
+046-3,119,104,5,4|monster|IceElement|1071,1,100000ms,30000ms
+046-3,132,71,9,7|monster|WhiteSlime|1093,4,100000ms,30000ms
+046-3,107,85,14,9|monster|BlueSlime|1091,2,100000ms,30000ms
+046-3,98,77,6,4|monster|WhiteSlime|1093,4,100000ms,30000ms
+046-3,70,82,6,4|monster|WhiteSlime|1093,6,100000ms,30000ms
+046-3,106,34,6,4|monster|WhiteSlime|1093,4,100000ms,30000ms
+046-3,33,37,6,4|monster|WhiteSlime|1093,4,100000ms,30000ms
+046-3,144,105,14,9|monster|BlueSlime|1091,2,100000ms,30000ms
+046-3,152,55,14,9|monster|BlueSlime|1091,2,100000ms,30000ms
+046-3,84,53,14,9|monster|BlueSlime|1091,2,100000ms,30000ms
+046-3,47,23,15,10|monster|IceElement|1071,2,100000ms,30000ms
+046-3,113,48,12,8|monster|Yeti|1072,2,100000ms,30000ms
diff --git a/world/map/npc/046-3/_nodes.txt b/world/map/npc/046-3/_nodes.txt
new file mode 100644
index 00000000..42beb88a
--- /dev/null
+++ b/world/map/npc/046-3/_nodes.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Frosty Underground nodes
+
+// (no nodes)
diff --git a/world/map/npc/047-1/_import.txt b/world/map/npc/047-1/_import.txt
index 7dbebdc4..d99b52f5 100644
--- a/world/map/npc/047-1/_import.txt
+++ b/world/map/npc/047-1/_import.txt
@@ -2,5 +2,6 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 047-1
npc: npc/047-1/_mobs.txt
+npc: npc/047-1/_nodes.txt
npc: npc/047-1/_warps.txt
npc: npc/047-1/mapflags.txt
diff --git a/world/map/npc/047-1/_mobs.txt b/world/map/npc/047-1/_mobs.txt
index a502dcdf..8c709dff 100644
--- a/world/map/npc/047-1/_mobs.txt
+++ b/world/map/npc/047-1/_mobs.txt
@@ -1,76 +1,25 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// snow Hills mobs
-047-1,37,175,3,2|monster|WhiteSlime|1093,7,100000ms,30000ms,Mob047-1::On1093
-047-1,45,75,2,2|monster|BlueSlime|1091,1,100000ms,30000ms,Mob047-1::On1091
-047-1,0,0,0,0|monster|Reinboo|1094,50,100000ms,30000ms,Mob047-1::On1094
-047-1,0,0,0,0|monster|Fluffy|1020,60,100000ms,30000ms,Mob047-1::On1020
-047-1,0,0,0,0|monster|Squirrel|1038,60,100000ms,30000ms,Mob047-1::On1038
-047-1,81,125,103,56|monster|Moggun|1061,25,100000ms,30000ms,Mob047-1::On1061
-047-1,189,123,25,36|monster|Wolvern|1090,6,100000ms,30000ms,Mob047-1::On1090
-047-1,160,115,25,20|monster|Wolvern|1090,6,100000ms,30000ms,Mob047-1::On1090
-047-1,169,163,48,31|monster|Wolvern|1090,6,100000ms,30000ms,Mob047-1::On1090
-047-1,58,71,48,31|monster|Wolvern|1090,6,100000ms,30000ms,Mob047-1::On1090
-047-1,122,116,20,24|monster|Wolvern|1090,6,100000ms,30000ms,Mob047-1::On1090
-047-1,110,173,25,20|monster|Wolvern|1090,6,100000ms,30000ms,Mob047-1::On1090
-047-1,108,168,3,2|monster|WhiteSlime|1093,7,100000ms,30000ms,Mob047-1::On1093
-047-1,108,158,3,2|monster|BlueSlime|1091,1,100000ms,30000ms,Mob047-1::On1091
-047-1,0,0,0,0|monster|WhiteBell|1095,10,100000ms,30000ms,Mob047-1::On1095
-047-1,87,119,36,35|monster|Yeti|1072,2,100000ms,30000ms,Mob047-1::On1072
-047-1,138,22,2,2|monster|WhiteSlime|1093,4,100000ms,30000ms,Mob047-1::On1093
-047-1,157,66,2,2|monster|WhiteSlime|1093,4,100000ms,30000ms,Mob047-1::On1093
-047-1,174,46,4,5|monster|BlueSlime|1091,2,100000ms,30000ms,Mob047-1::On1091
-047-1,143,43,4,5|monster|BlueSlime|1091,2,100000ms,30000ms,Mob047-1::On1091
-047-1,122,61,2,2|monster|WhiteSlime|1093,4,100000ms,30000ms,Mob047-1::On1093
-047-1,132,70,4,5|monster|BlueSlime|1091,2,100000ms,30000ms,Mob047-1::On1091
-
-
-047-1,0,0,0|script|Mob047-1|32767
-{
- end;
-
-On1020:
- set @mobID, 1020;
- callfunc "MobPoints";
- end;
-
-On1038:
- set @mobID, 1038;
- callfunc "MobPoints";
- end;
-
-On1061:
- set @mobID, 1061;
- callfunc "MobPoints";
- end;
-
-On1072:
- set @mobID, 1072;
- callfunc "MobPoints";
- end;
-
-On1090:
- set @mobID, 1090;
- callfunc "MobPoints";
- end;
-
-On1091:
- set @mobID, 1091;
- callfunc "MobPoints";
- end;
-
-On1093:
- set @mobID, 1093;
- callfunc "MobPoints";
- end;
-
-On1094:
- set @mobID, 1094;
- callfunc "MobPoints";
- end;
-
-On1095:
- set @mobID, 1095;
- callfunc "MobPoints";
- end;
-}
+047-1,37,175,3,2|monster|WhiteSlime|1093,7,100000ms,30000ms
+047-1,45,75,2,2|monster|BlueSlime|1091,1,100000ms,30000ms
+047-1,0,0,0,0|monster|Reinboo|1094,50,100000ms,30000ms
+047-1,0,0,0,0|monster|Fluffy|1020,60,100000ms,30000ms
+047-1,0,0,0,0|monster|Squirrel|1038,60,100000ms,30000ms
+047-1,81,125,103,56|monster|Moggun|1061,25,100000ms,30000ms
+047-1,189,123,25,36|monster|Wolvern|1090,6,100000ms,30000ms
+047-1,160,115,25,20|monster|Wolvern|1090,6,100000ms,30000ms
+047-1,169,163,48,31|monster|Wolvern|1090,6,100000ms,30000ms
+047-1,58,71,48,31|monster|Wolvern|1090,6,100000ms,30000ms
+047-1,122,116,20,24|monster|Wolvern|1090,6,100000ms,30000ms
+047-1,110,173,25,20|monster|Wolvern|1090,6,100000ms,30000ms
+047-1,108,168,3,2|monster|WhiteSlime|1093,7,100000ms,30000ms
+047-1,108,158,3,2|monster|BlueSlime|1091,1,100000ms,30000ms
+047-1,0,0,0,0|monster|WhiteBell|1095,10,100000ms,30000ms
+047-1,87,119,36,35|monster|Yeti|1072,2,100000ms,30000ms
+047-1,138,22,2,2|monster|WhiteSlime|1093,4,100000ms,30000ms
+047-1,157,66,2,2|monster|WhiteSlime|1093,4,100000ms,30000ms
+047-1,174,46,4,5|monster|BlueSlime|1091,2,100000ms,30000ms
+047-1,143,43,4,5|monster|BlueSlime|1091,2,100000ms,30000ms
+047-1,122,61,2,2|monster|WhiteSlime|1093,4,100000ms,30000ms
+047-1,132,70,4,5|monster|BlueSlime|1091,2,100000ms,30000ms
diff --git a/world/map/npc/047-1/_nodes.txt b/world/map/npc/047-1/_nodes.txt
new file mode 100644
index 00000000..d910c062
--- /dev/null
+++ b/world/map/npc/047-1/_nodes.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// snow Hills nodes
+
+// (no nodes)
diff --git a/world/map/npc/047-3/_import.txt b/world/map/npc/047-3/_import.txt
index 4f711642..5250ad76 100644
--- a/world/map/npc/047-3/_import.txt
+++ b/world/map/npc/047-3/_import.txt
@@ -2,5 +2,6 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 047-3
npc: npc/047-3/_mobs.txt
+npc: npc/047-3/_nodes.txt
npc: npc/047-3/_warps.txt
npc: npc/047-3/mapflags.txt
diff --git a/world/map/npc/047-3/_mobs.txt b/world/map/npc/047-3/_mobs.txt
index adf84729..2b0f3338 100644
--- a/world/map/npc/047-3/_mobs.txt
+++ b/world/map/npc/047-3/_mobs.txt
@@ -1,60 +1,24 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Snow Hills Cave mobs
-047-3,56,135,9,8|monster|WhiteSlime|1093,7,100000ms,30000ms,Mob047-3::On1093
-047-3,35,153,6,6|monster|WhiteSlime|1093,7,100000ms,30000ms,Mob047-3::On1093
-047-3,39,104,9,8|monster|WhiteSlime|1093,7,100000ms,30000ms,Mob047-3::On1093
-047-3,73,153,9,8|monster|WhiteSlime|1093,7,100000ms,30000ms,Mob047-3::On1093
-047-3,64,104,3,3|monster|WhiteSlime|1093,7,100000ms,30000ms,Mob047-3::On1093
-047-3,24,168,6,4|monster|BlueSlime|1091,2,100000ms,30000ms,Mob047-3::On1091
-047-3,87,134,5,3|monster|BlueSlime|1091,2,100000ms,30000ms,Mob047-3::On1091
-047-3,55,122,5,3|monster|BlueSlime|1091,2,100000ms,30000ms,Mob047-3::On1091
-047-3,35,128,5,3|monster|BlueSlime|1091,2,100000ms,30000ms,Mob047-3::On1091
-047-3,53,84,5,3|monster|BlueSlime|1091,2,100000ms,30000ms,Mob047-3::On1091
-047-3,75,136,21,26|monster|Moggun|1061,5,100000ms,30000ms,Mob047-3::On1061
-047-3,39,31,42,21|monster|Moggun|1061,12,100000ms,30000ms,Mob047-3::On1061
-047-3,40,31,5,3|monster|IceSkull|1085,2,100000ms,30000ms,Mob047-3::On1085
-047-3,122,157,21,16|monster|Yeti|1072,2,100000ms,30000ms,Mob047-3::On1072
-047-3,102,166,15,13|monster|IceSkull|1085,5,100000ms,30000ms,Mob047-3::On1085
-047-3,109,81,15,13|monster|IceElement|1071,1,100000ms,30000ms,Mob047-3::On1071
-047-3,123,90,5,3|monster|BlueSlime|1091,2,100000ms,30000ms,Mob047-3::On1091
-047-3,109,97,9,8|monster|WhiteSlime|1093,7,100000ms,30000ms,Mob047-3::On1093
-047-3,119,41,42,21|monster|Moggun|1061,8,100000ms,30000ms,Mob047-3::On1061
-047-3,51,94,39,14|monster|IceSkull|1085,5,100000ms,30000ms,Mob047-3::On1085
-047-3,121,172,9,8|monster|WhiteSlime|1093,7,100000ms,30000ms,Mob047-3::On1093
-
-
-047-3,0,0,0|script|Mob047-3|32767
-{
- end;
-
-On1061:
- set @mobID, 1061;
- callfunc "MobPoints";
- end;
-
-On1071:
- set @mobID, 1071;
- callfunc "MobPoints";
- end;
-
-On1072:
- set @mobID, 1072;
- callfunc "MobPoints";
- end;
-
-On1085:
- set @mobID, 1085;
- callfunc "MobPoints";
- end;
-
-On1091:
- set @mobID, 1091;
- callfunc "MobPoints";
- end;
-
-On1093:
- set @mobID, 1093;
- callfunc "MobPoints";
- end;
-}
+047-3,56,135,9,8|monster|WhiteSlime|1093,7,100000ms,30000ms
+047-3,35,153,6,6|monster|WhiteSlime|1093,7,100000ms,30000ms
+047-3,39,104,9,8|monster|WhiteSlime|1093,7,100000ms,30000ms
+047-3,73,153,9,8|monster|WhiteSlime|1093,7,100000ms,30000ms
+047-3,64,104,3,3|monster|WhiteSlime|1093,7,100000ms,30000ms
+047-3,24,168,6,4|monster|BlueSlime|1091,2,100000ms,30000ms
+047-3,87,134,5,3|monster|BlueSlime|1091,2,100000ms,30000ms
+047-3,55,122,5,3|monster|BlueSlime|1091,2,100000ms,30000ms
+047-3,35,128,5,3|monster|BlueSlime|1091,2,100000ms,30000ms
+047-3,53,84,5,3|monster|BlueSlime|1091,2,100000ms,30000ms
+047-3,75,136,21,26|monster|Moggun|1061,5,100000ms,30000ms
+047-3,39,31,42,21|monster|Moggun|1061,12,100000ms,30000ms
+047-3,40,31,5,3|monster|IceSkull|1085,2,100000ms,30000ms
+047-3,122,157,21,16|monster|Yeti|1072,2,100000ms,30000ms
+047-3,102,166,15,13|monster|IceSkull|1085,5,100000ms,30000ms
+047-3,109,81,15,13|monster|IceElement|1071,1,100000ms,30000ms
+047-3,123,90,5,3|monster|BlueSlime|1091,2,100000ms,30000ms
+047-3,109,97,9,8|monster|WhiteSlime|1093,7,100000ms,30000ms
+047-3,119,41,42,21|monster|Moggun|1061,8,100000ms,30000ms
+047-3,51,94,39,14|monster|IceSkull|1085,5,100000ms,30000ms
+047-3,121,172,9,8|monster|WhiteSlime|1093,7,100000ms,30000ms
diff --git a/world/map/npc/047-3/_nodes.txt b/world/map/npc/047-3/_nodes.txt
new file mode 100644
index 00000000..06534770
--- /dev/null
+++ b/world/map/npc/047-3/_nodes.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Snow Hills Cave nodes
+
+// (no nodes)
diff --git a/world/map/npc/048-2/_import.txt b/world/map/npc/048-2/_import.txt
index 8178036c..a820b2d4 100644
--- a/world/map/npc/048-2/_import.txt
+++ b/world/map/npc/048-2/_import.txt
@@ -2,6 +2,7 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 048-2
npc: npc/048-2/_mobs.txt
+npc: npc/048-2/_nodes.txt
npc: npc/048-2/_warps.txt
npc: npc/048-2/bluesageConfig.txt
npc: npc/048-2/helperAccused.txt
diff --git a/world/map/npc/048-2/_mobs.txt b/world/map/npc/048-2/_mobs.txt
index 87b5b1d4..c9f81014 100644
--- a/world/map/npc/048-2/_mobs.txt
+++ b/world/map/npc/048-2/_mobs.txt
@@ -1,9 +1,3 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Blue Sages' Mansion mobs
-
-
-048-2,0,0,0|script|Mob048-2|32767
-{
- end;
-}
diff --git a/world/map/npc/048-2/_nodes.txt b/world/map/npc/048-2/_nodes.txt
new file mode 100644
index 00000000..f5923fb2
--- /dev/null
+++ b/world/map/npc/048-2/_nodes.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Blue Sages' Mansion nodes
+
+// (no nodes)
diff --git a/world/map/npc/051-1/_import.txt b/world/map/npc/051-1/_import.txt
index 9f93f8ef..2e99eba9 100644
--- a/world/map/npc/051-1/_import.txt
+++ b/world/map/npc/051-1/_import.txt
@@ -2,6 +2,7 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 051-1
npc: npc/051-1/_mobs.txt
+npc: npc/051-1/_nodes.txt
npc: npc/051-1/_warps.txt
npc: npc/051-1/desert.txt
npc: npc/051-1/desertmonsters.txt
diff --git a/world/map/npc/051-1/_mobs.txt b/world/map/npc/051-1/_mobs.txt
index 752c527c..7569cce6 100644
--- a/world/map/npc/051-1/_mobs.txt
+++ b/world/map/npc/051-1/_mobs.txt
@@ -1,21 +1,5 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Illia outskirts mobs
-051-1,42,35,42,24|monster|LogHead|1025,30,100000ms,30000ms,Mob051-1::On1025
-051-1,42,35,41,22|monster|SpikyMushroom|1019,10,100000ms,30000ms,Mob051-1::On1019
-
-
-051-1,0,0,0|script|Mob051-1|32767
-{
- end;
-
-On1019:
- set @mobID, 1019;
- callfunc "MobPoints";
- end;
-
-On1025:
- set @mobID, 1025;
- callfunc "MobPoints";
- end;
-}
+051-1,42,35,42,24|monster|LogHead|1025,30,100000ms,30000ms
+051-1,42,35,41,22|monster|SpikyMushroom|1019,10,100000ms,30000ms
diff --git a/world/map/npc/051-1/_nodes.txt b/world/map/npc/051-1/_nodes.txt
new file mode 100644
index 00000000..86674b68
--- /dev/null
+++ b/world/map/npc/051-1/_nodes.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Illia outskirts nodes
+
+// (no nodes)
diff --git a/world/map/npc/051-3/_import.txt b/world/map/npc/051-3/_import.txt
index f74d6cb4..f4cae902 100644
--- a/world/map/npc/051-3/_import.txt
+++ b/world/map/npc/051-3/_import.txt
@@ -2,6 +2,7 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 051-3
npc: npc/051-3/_mobs.txt
+npc: npc/051-3/_nodes.txt
npc: npc/051-3/_warps.txt
npc: npc/051-3/ambush.txt
npc: npc/051-3/jailslimes.txt
diff --git a/world/map/npc/051-3/_mobs.txt b/world/map/npc/051-3/_mobs.txt
index 711bf39c..3b10016f 100644
--- a/world/map/npc/051-3/_mobs.txt
+++ b/world/map/npc/051-3/_mobs.txt
@@ -1,65 +1,19 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Illia Bandit Cave mobs
-051-3,31,52,21,13|monster|RedSlime|1008,8,100000ms,30000ms,Mob051-3::On1008
-051-3,31,52,19,14|monster|CaveMaggot|1056,3,100000ms,30000ms,Mob051-3::On1056
-051-3,56,102,3,2|monster|Spider|1012,1,100000ms,250000ms,Mob051-3::On1012
-051-3,61,102,2,2|monster|Spider|1012,1,100000ms,250000ms,Mob051-3::On1012
-051-3,65,102,2,2|monster|Spider|1012,1,100000ms,250000ms,Mob051-3::On1012
-051-3,71,109,4,2|monster|BlackScorpion|1009,1,100000ms,250000ms,Mob051-3::On1009
-051-3,59,56,12,36|monster|Bandit|1064,47,100000ms,10000ms,Mob051-3::On1064
-051-3,59,44,13,13|monster|BanditLord|1065,4,100000ms,20000ms,Mob051-3::On1065
-051-3,60,69,18,9|monster|BanditLord|1065,4,100000ms,20000ms,Mob051-3::On1065
-051-3,63,94,0,0|monster|SleepingBandit|1099,1,100000ms,60000ms,Mob051-3::On1099
-051-3,53,93,0,0|monster|SleepingBandit|1099,1,100000ms,60000ms,Mob051-3::On1099
-051-3,48,71,0,0|monster|SleepingBandit|1099,1,100000ms,60000ms,Mob051-3::On1099
-051-3,38,30,17,12|monster|Bandit|1064,12,100000ms,10000ms,Mob051-3::On1064
-051-3,39,33,11,8|monster|BanditLord|1065,2,100000ms,20000ms,Mob051-3::On1065
-051-3,80,101,10,12|monster|CopperSlime|1098,7,100000ms,60000ms,Mob051-3::On1098
-051-3,60,94,18,5|monster|CopperSlime|1098,7,100000ms,60000ms,Mob051-3::On1098
-
-
-051-3,0,0,0|script|Mob051-3|32767
-{
- end;
-
-On1008:
- set @mobID, 1008;
- callfunc "MobPoints";
- end;
-
-On1009:
- set @mobID, 1009;
- callfunc "MobPoints";
- end;
-
-On1012:
- set @mobID, 1012;
- callfunc "MobPoints";
- end;
-
-On1056:
- set @mobID, 1056;
- callfunc "MobPoints";
- end;
-
-On1064:
- set @mobID, 1064;
- callfunc "MobPoints";
- end;
-
-On1065:
- set @mobID, 1065;
- callfunc "MobPoints";
- end;
-
-On1098:
- set @mobID, 1098;
- callfunc "MobPoints";
- end;
-
-On1099:
- set @mobID, 1099;
- callfunc "MobPoints";
- end;
-}
+051-3,31,52,21,13|monster|RedSlime|1008,8,100000ms,30000ms
+051-3,31,52,19,14|monster|CaveMaggot|1056,3,100000ms,30000ms
+051-3,56,102,3,2|monster|Spider|1012,1,100000ms,250000ms
+051-3,61,102,2,2|monster|Spider|1012,1,100000ms,250000ms
+051-3,65,102,2,2|monster|Spider|1012,1,100000ms,250000ms
+051-3,71,109,4,2|monster|BlackScorpion|1009,1,100000ms,250000ms
+051-3,59,56,12,36|monster|Bandit|1064,47,100000ms,10000ms
+051-3,59,44,13,13|monster|BanditLord|1065,4,100000ms,20000ms
+051-3,60,69,18,9|monster|BanditLord|1065,4,100000ms,20000ms
+051-3,63,94,0,0|monster|SleepingBandit|1099,1,100000ms,60000ms
+051-3,53,93,0,0|monster|SleepingBandit|1099,1,100000ms,60000ms
+051-3,48,71,0,0|monster|SleepingBandit|1099,1,100000ms,60000ms
+051-3,38,30,17,12|monster|Bandit|1064,12,100000ms,10000ms
+051-3,39,33,11,8|monster|BanditLord|1065,2,100000ms,20000ms
+051-3,80,101,10,12|monster|CopperSlime|1098,7,100000ms,60000ms
+051-3,60,94,18,5|monster|CopperSlime|1098,7,100000ms,60000ms
diff --git a/world/map/npc/051-3/_nodes.txt b/world/map/npc/051-3/_nodes.txt
new file mode 100644
index 00000000..75194dbf
--- /dev/null
+++ b/world/map/npc/051-3/_nodes.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Illia Bandit Cave nodes
+
+// (no nodes)
diff --git a/world/map/npc/051-3/ambush.txt b/world/map/npc/051-3/ambush.txt
index da12b306..7d659710 100644
--- a/world/map/npc/051-3/ambush.txt
+++ b/world/map/npc/051-3/ambush.txt
@@ -72,8 +72,8 @@ OnTimer9000:
end;
OnTimer11000:
- areatimer "051-3", 22, 12, 102, 97, 500, "#BndtTl::OnOuch";
- areatimer "051-3", 22, 12, 102, 97, 3000, "#BndtTl::OnA";
+ areatimer 0, "051-3", 22, 12, 102, 97, 500, "#BndtTl::OnOuch";
+ areatimer 0, "051-3", 22, 12, 102, 97, 3000, "#BndtTl::OnA";
stopnpctimer;
setnpctimer 0;
end;
diff --git a/world/map/npc/051-3/reinforcements.txt b/world/map/npc/051-3/reinforcements.txt
index 73236dec..5870671c 100644
--- a/world/map/npc/051-3/reinforcements.txt
+++ b/world/map/npc/051-3/reinforcements.txt
@@ -49,7 +49,7 @@ OnRnfrcmts:
areamonster "051-3", 29, 25, 48, 39, "", 1065, 3, "Door::OnB";
initnpctimer;
mapannounce "051-3", "Bandit Lords : Do not let them escape!!" , 0;
- areatimer "051-3", 25, 20, 80, 85, 10, "Door::OnDRnfrcmts";
+ areatimer 0, "051-3", 25, 20, 80, 85, 10, "Door::OnDRnfrcmts";
end;
OnB:
@@ -72,7 +72,7 @@ L_OpenDoor:
set $@illia_progress, 3;
callfunc "UpdateIlliaProgress";
set $@illia_max_time, $@illia_max_time + 300;
- areatimer "051-3", 25, 20, 80, 85, 10, "Door::OnKeyFound";
+ areatimer 0, "051-3", 25, 20, 80, 85, 10, "Door::OnKeyFound";
stopnpctimer;
setnpctimer 0;
end;
diff --git a/world/map/npc/052-1/_import.txt b/world/map/npc/052-1/_import.txt
index c4c9d1e3..05e7e8e9 100644
--- a/world/map/npc/052-1/_import.txt
+++ b/world/map/npc/052-1/_import.txt
@@ -2,6 +2,7 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 052-1
npc: npc/052-1/_mobs.txt
+npc: npc/052-1/_nodes.txt
npc: npc/052-1/_warps.txt
npc: npc/052-1/channelling.txt
npc: npc/052-1/janitor.txt
diff --git a/world/map/npc/052-1/_mobs.txt b/world/map/npc/052-1/_mobs.txt
index c386d5d1..96b998eb 100644
--- a/world/map/npc/052-1/_mobs.txt
+++ b/world/map/npc/052-1/_mobs.txt
@@ -1,15 +1,4 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Illia archipelago mobs
-052-1,55,29,43,39|monster|AzulSlime|1100,18,100000ms,20000ms,Mob052-1::On1100
-
-
-052-1,0,0,0|script|Mob052-1|32767
-{
- end;
-
-On1100:
- set @mobID, 1100;
- callfunc "MobPoints";
- end;
-}
+052-1,55,29,43,39|monster|AzulSlime|1100,18,100000ms,20000ms
diff --git a/world/map/npc/052-1/_nodes.txt b/world/map/npc/052-1/_nodes.txt
new file mode 100644
index 00000000..35ee39e3
--- /dev/null
+++ b/world/map/npc/052-1/_nodes.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Illia archipelago nodes
+
+// (no nodes)
diff --git a/world/map/npc/052-1/channelling.txt b/world/map/npc/052-1/channelling.txt
index 565f96fd..5eb3dfbf 100644
--- a/world/map/npc/052-1/channelling.txt
+++ b/world/map/npc/052-1/channelling.txt
@@ -141,6 +141,10 @@ L_Return:
goto L_Hint;
end;
+OnCast:
+ callfunc "StartChannelling";
+ end;
+
OnCommandSt:
initnpctimer;
end;
@@ -259,7 +263,7 @@ S_CheckChannelling:
set $@illia_channelling_status_msg$, $@illia_char_channelling$ + ": Damn! It faded a little.";
if ($@illia_channelling_status_msg$ != "")
- areatimer "052-1", 1, 1, 100, 80, 0, "#Power Circle::OnMPSC";
+ areatimer 0, "052-1", 1, 1, 100, 80, 0, "#Power Circle::OnMPSC";
return;
@@ -328,4 +332,8 @@ L_ChannellingFail:
L_ShouldNotBeHere:
heal -Hp, 0;
end;
+
+OnInit:
+ registercmd "#catalazuli", strnpcinfo(0)+"::OnCast";
+ end;
}
diff --git a/world/map/npc/052-2/_import.txt b/world/map/npc/052-2/_import.txt
index 0a8b5847..aa01af40 100644
--- a/world/map/npc/052-2/_import.txt
+++ b/world/map/npc/052-2/_import.txt
@@ -2,6 +2,7 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 052-2
npc: npc/052-2/_mobs.txt
+npc: npc/052-2/_nodes.txt
npc: npc/052-2/_warps.txt
npc: npc/052-2/chest.txt
npc: npc/052-2/janitor.txt
diff --git a/world/map/npc/052-2/_mobs.txt b/world/map/npc/052-2/_mobs.txt
index 1fb96829..1d91c286 100644
--- a/world/map/npc/052-2/_mobs.txt
+++ b/world/map/npc/052-2/_mobs.txt
@@ -1,9 +1,3 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Illia forsaken inn mobs
-
-
-052-2,0,0,0|script|Mob052-2|32767
-{
- end;
-}
diff --git a/world/map/npc/052-2/_nodes.txt b/world/map/npc/052-2/_nodes.txt
new file mode 100644
index 00000000..38010d03
--- /dev/null
+++ b/world/map/npc/052-2/_nodes.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Illia forsaken inn nodes
+
+// (no nodes)
diff --git a/world/map/npc/052-2/lobby.txt b/world/map/npc/052-2/lobby.txt
index efc0a20a..1b36d929 100644
--- a/world/map/npc/052-2/lobby.txt
+++ b/world/map/npc/052-2/lobby.txt
@@ -337,7 +337,7 @@ L_ChaseLuvia:
set $@illia_progress, 6;
callfunc "UpdateIlliaProgress";
set $@illia_max_time, $@illia_max_time + 360;
- areatimer "052-2", 19, 18, 48, 43, 2000, "#LuviaShadow::OnNN";
+ areatimer 0, "052-2", 19, 18, 48, 43, 2000, "#LuviaShadow::OnNN";
end;
S_GetHeroRect:
diff --git a/world/map/npc/052-2/partyroom.txt b/world/map/npc/052-2/partyroom.txt
index 02d7a7ac..ec6d2a64 100644
--- a/world/map/npc/052-2/partyroom.txt
+++ b/world/map/npc/052-2/partyroom.txt
@@ -182,7 +182,7 @@ S_SpawnWitchGuard:
misceffect FX_GROUND_SPAWN;
monster "052-2", getx(), gety(), "", 1103, 1, "#LuviaDaemon::OnWGD";
detachrid;
- areatimer "052-2", 73, 11, 115, 49, 0, "#LuviaDaemon::OnWGS";
+ areatimer 0, "052-2", 73, 11, 115, 49, 0, "#LuviaDaemon::OnWGS";
return;
OnTimer30000:
@@ -198,7 +198,7 @@ OnTimer30000:
L_TriggerTrance:
set $@illia_level_7_progress, 3;
set $@illia_luvia_trance_delay, 0;
- areatimer "052-2", 73, 11, 115, 49, 0, "#LuviaDaemon::OnTT";
+ areatimer 0, "052-2", 73, 11, 115, 49, 0, "#LuviaDaemon::OnTT";
setnpctimer 0;
end;
@@ -217,9 +217,9 @@ OnDeath:
mapannounce "052-2", "Luvia : How? By mere humans! But we will see again! Enjoy your victory while it lasts, " + $@ILLIA_HERO$ + "!!", 0;
set $@illia_bp, $Illia_Luvia_Harvest * 16 / 10 + 120;
- areatimer "052-2", 73, 11, 115, 49, 0, "#LuviaDaemon::OnBP";
+ areatimer 0, "052-2", 73, 11, 115, 49, 0, "#LuviaDaemon::OnBP";
- areatimer "052-2", 73, 11, 115, 49, 2000, "#LuviaDaemon::OnW00t";
+ areatimer 0, "052-2", 73, 11, 115, 49, 2000, "#LuviaDaemon::OnW00t";
set $@illia_progress, 8;
callfunc "UpdateIlliaProgress";
diff --git a/world/map/npc/052-2/storage.txt b/world/map/npc/052-2/storage.txt
index 8abbb732..a8582408 100644
--- a/world/map/npc/052-2/storage.txt
+++ b/world/map/npc/052-2/storage.txt
@@ -42,7 +42,7 @@ OnCommandStart:
set $@illia_storage_max_items, 20;
set $@illia_storage_deviation, (8 + ($Illia_Luvia_Harvest*70)/100)*3;
initnpctimer;
- areatimer "052-2", 19, 60, 35, 78, 10, "#ItemsInvoker::OnStart";
+ areatimer 0, "052-2", 19, 60, 35, 78, 10, "#ItemsInvoker::OnStart";
end;
OnStart:
@@ -64,7 +64,7 @@ OnTimer1000:
OnTimer1500:
// See the note above.
enablenpc "#ItemsInvoker";
- areatimer "052-2", 19, 60, 35, 78, 10, "#ItemsInvoker::OnItem";
+ areatimer 0, "052-2", 19, 60, 35, 78, 10, "#ItemsInvoker::OnItem";
misceffect FX_GROUND_SPAWN;
end;
@@ -109,7 +109,7 @@ L_ItemSpawn:
L_MakeSpecialMonster:
monster "052-2", $@item_invoke_x, $@item_invoke_y, "", 1103, 1, "#ItemsInvoker::OnDeath";
- areatimer "052-2", 19, 60, 35, 78, 10, "#ItemsInvoker::OnWtf";
+ areatimer 0, "052-2", 19, 60, 35, 78, 10, "#ItemsInvoker::OnWtf";
set $@illia_storage_max_items, $@illia_storage_max_items - 1;
end;
@@ -121,7 +121,7 @@ L_MakeMonster:
L_MakeSpecialItem:
makeitem $@illia_storage_special_items[rand(getarraysize($@illia_storage_special_items))], rand(2, 4), "052-2", $@item_invoke_x, $@item_invoke_y;
- areatimer "052-2", 19, 60, 35, 78, 10, "#ItemsInvoker::OnWow";
+ areatimer 0, "052-2", 19, 60, 35, 78, 10, "#ItemsInvoker::OnWow";
set $@illia_storage_max_items, $@illia_storage_max_items - 1;
set @r, 0;
end;
@@ -152,7 +152,7 @@ L_Stop:
set $@illia_progress, 7;
callfunc "UpdateIlliaProgress";
set $@illia_max_time, $@illia_max_time + 900;
- areatimer "052-2", 19, 60, 35, 78, 10, "#ItemsInvoker::OnStop";
+ areatimer 0, "052-2", 19, 60, 35, 78, 10, "#ItemsInvoker::OnStop";
end;
OnDeath:
diff --git a/world/map/npc/055-1/_import.txt b/world/map/npc/055-1/_import.txt
index 10c3c13c..8760f125 100644
--- a/world/map/npc/055-1/_import.txt
+++ b/world/map/npc/055-1/_import.txt
@@ -2,6 +2,7 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 055-1
npc: npc/055-1/_mobs.txt
+npc: npc/055-1/_nodes.txt
npc: npc/055-1/_warps.txt
npc: npc/055-1/flowerpentagram4.txt
npc: npc/055-1/mapflags.txt
diff --git a/world/map/npc/055-1/_mobs.txt b/world/map/npc/055-1/_mobs.txt
index 35741d32..23eba0b0 100644
--- a/world/map/npc/055-1/_mobs.txt
+++ b/world/map/npc/055-1/_mobs.txt
@@ -1,86 +1,20 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Woodland Hills mobs
-055-1,68,72,22,19|monster|Butterfly|1055,16,10000ms,85000ms,Mob055-1::On1055
-055-1,87,29,55,14|monster|Silkworm|1035,15,10000ms,85000ms,Mob055-1::On1035
-055-1,79,30,84,17|monster|Squirrel|1038,10,10000ms,45000ms,Mob055-1::On1038
-055-1,0,0,0,0|monster|Mouboo|1028,15,10000ms,85000ms,Mob055-1::On1028
-055-1,91,49,6,4|monster|CloverPatch|1037,1,10000ms,180000ms,Mob055-1::On1037
-055-1,103,54,5,3|monster|CloverPatch|1037,1,10000ms,180000ms,Mob055-1::On1037
-055-1,64,75,27,16|monster|CloverPatch|1037,1,10000ms,120000ms,Mob055-1::On1037
-055-1,80,34,82,25|monster|Snail|1041,3,10000ms,85000ms,Mob055-1::On1041
-055-1,70,72,17,24|monster|AlizarinPlant|1032,2,10000ms,60000ms,Mob055-1::On1032
-055-1,81,32,81,22|monster|AlizarinPlant|1032,2,10000ms,60000ms,Mob055-1::On1032
-055-1,0,0,0,0|monster|MauvePlant|1029,7,10000ms,55000ms,Mob055-1::On1029
-055-1,0,0,0,0|monster|CobaltPlant|1030,3,10000ms,60000ms,Mob055-1::On1030
-055-1,0,0,0,0|monster|GambogePlant|1031,2,10000ms,60000ms,Mob055-1::On1031
-055-1,116,60,4,2|monster|PinkFlower|1014,1,10000ms,45000ms,Mob055-1::On1014
-055-1,97,60,4,2|monster|PinkFlower|1014,1,10000ms,45000ms,Mob055-1::On1014
-055-1,64,73,23,17|monster|PinkFlower|1014,1,10000ms,45000ms,Mob055-1::On1014
-055-1,0,0,0,0|monster|SpikyMushroom|1019,7,10000ms,60000ms,Mob055-1::On1019
-
-
-055-1,0,0,0|script|Mob055-1|32767
-{
- end;
-
-On1014:
- set @mobID, 1014;
- callfunc "MobPoints";
- end;
-
-On1019:
- set @mobID, 1019;
- callfunc "MobPoints";
- end;
-
-On1028:
- set @mobID, 1028;
- callfunc "MobPoints";
- end;
-
-On1029:
- set @mobID, 1029;
- callfunc "MobPoints";
- end;
-
-On1030:
- set @mobID, 1030;
- callfunc "MobPoints";
- end;
-
-On1031:
- set @mobID, 1031;
- callfunc "MobPoints";
- end;
-
-On1032:
- set @mobID, 1032;
- callfunc "MobPoints";
- end;
-
-On1035:
- set @mobID, 1035;
- callfunc "MobPoints";
- end;
-
-On1037:
- set @mobID, 1037;
- callfunc "MobPoints";
- end;
-
-On1038:
- set @mobID, 1038;
- callfunc "MobPoints";
- end;
-
-On1041:
- set @mobID, 1041;
- callfunc "MobPoints";
- end;
-
-On1055:
- set @mobID, 1055;
- callfunc "MobPoints";
- end;
-}
+055-1,68,72,22,19|monster|Butterfly|1055,16,10000ms,85000ms
+055-1,87,29,55,14|monster|Silkworm|1035,15,10000ms,85000ms
+055-1,79,30,84,17|monster|Squirrel|1038,10,10000ms,45000ms
+055-1,0,0,0,0|monster|Mouboo|1028,15,10000ms,85000ms
+055-1,91,49,6,4|monster|CloverPatch|1037,1,10000ms,180000ms
+055-1,103,54,5,3|monster|CloverPatch|1037,1,10000ms,180000ms
+055-1,64,75,27,16|monster|CloverPatch|1037,1,10000ms,120000ms
+055-1,80,34,82,25|monster|Snail|1041,3,10000ms,85000ms
+055-1,70,72,17,24|monster|AlizarinPlant|1032,2,10000ms,60000ms
+055-1,81,32,81,22|monster|AlizarinPlant|1032,2,10000ms,60000ms
+055-1,0,0,0,0|monster|MauvePlant|1029,7,10000ms,55000ms
+055-1,0,0,0,0|monster|CobaltPlant|1030,3,10000ms,60000ms
+055-1,0,0,0,0|monster|GambogePlant|1031,2,10000ms,60000ms
+055-1,116,60,4,2|monster|PinkFlower|1014,1,10000ms,45000ms
+055-1,97,60,4,2|monster|PinkFlower|1014,1,10000ms,45000ms
+055-1,64,73,23,17|monster|PinkFlower|1014,1,10000ms,45000ms
+055-1,0,0,0,0|monster|SpikyMushroom|1019,7,10000ms,60000ms
diff --git a/world/map/npc/055-1/_nodes.txt b/world/map/npc/055-1/_nodes.txt
new file mode 100644
index 00000000..e6da33ea
--- /dev/null
+++ b/world/map/npc/055-1/_nodes.txt
@@ -0,0 +1,16 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Woodland Hills nodes
+
+055-1,0,0,0|script|Node055-1|32767
+{
+ end;
+OnInit:
+ setarray .m$, "_N-Pumpkin", "055-1", "055-1", "055-1";
+ setarray .x1, "_N-Pumpkin", 129, 133, 41;
+ setarray .y1, "_N-Pumpkin", 23, 27, 22;
+ setarray .x2, "_N-Pumpkin", 135, 139, 47;
+ setarray .y2, "_N-Pumpkin", 26, 33, 30;
+ setarray .id, "_N-Pumpkin", 0, 0, 0;
+ donpcevent "_N-Pumpkin::OnMaybeStart";
+ destroy;
+}
diff --git a/world/map/npc/055-1/pumpkins.txt b/world/map/npc/055-1/pumpkins.txt
index 96931e04..1c2535f7 100644
--- a/world/map/npc/055-1/pumpkins.txt
+++ b/world/map/npc/055-1/pumpkins.txt
@@ -1,18 +1,18 @@
-// Pumpkin mobs for the seasonal halloween event with Oscar
-055-1,48,25,16,8|monster|Pumpkin|1063,12,10000ms,5000ms,PumpkinMob055-1::On1063
-055-1,139,29,5,7|monster|Pumpkin|1063,7,10000ms,5000ms,PumpkinMob055-1::On1063
-055-1,132,24,6,4|monster|Pumpkin|1063,4,10000ms,5000ms,PumpkinMob055-1::On1063
+055-1,0,0,0|script|_N-Pumpkin|32767
+{
+//////////////////////////////////
+// puppet logic below
-055-1,0,0,0|script|PumpkinMob055-1|32767
-{
- end;
+ set @distance_handler, 1; // silent
+ set @npc_distance, (1-2); // -1 means attack range
+ callfunc "PCtoNPCRange";
+ if (@npc_check) end;
-On1063:
if (Quest_Halloween != 1 || !(gettime(6) == 11 && (gettime(5) >= 4 && gettime(5) <= 30)))
goto L_HeavyPoison;
if (@discover_poisonous_pumpkin == 0)
- message strcharinfo(0), "Yuke, this pumpkin released some ugly poison gas!";
+ message strcharinfo(0), "Pumpkin : Yuke, this pumpkin released some ugly poison gas!";
set @discover_poisonous_pumpkin, 1;
misceffect FX_PUMPKIN_EXPLOSION, strcharinfo(0);
heal -15, 0;
@@ -25,44 +25,130 @@ On1063:
set @mobID, 1063;
callfunc "MobPoints";
- end;
+ goto L_Destroy;
L_EnoughSeeds:
- message strcharinfo(0), $@halloween_num_seeds + " should be enough seeds for Oscar. And this pumpkin gas gets too bad to stand it any longer...";
+ message strcharinfo(0), "Pumpkin : " + $@halloween_num_seeds + " should be enough seeds for Oscar. And this pumpkin gas gets too bad to stand it any longer...";
set Quest_Halloween, 2;
// Reset this to get the message for the "heavy" poison
set @discover_poisonous_pumpkin, 0;
- end;
+ goto L_Destroy;
L_HeavyPoison:
if (@discover_poisonous_pumpkin == 0)
goto L_HeavyPoison0;
if (@discover_poisonous_pumpkin == 1)
goto L_HeavyPoison1;
- if (@discover_poisonous_pumpkin > 1)
- goto L_HeavyPoison2;
- end;
+ goto L_HeavyPoison2;
L_HeavyPoison0:
set @discover_poisonous_pumpkin, @discover_poisonous_pumpkin + 1;
- message strcharinfo(0), "Ouch, this pumpkin is totally poisonous! Let's get away from them!";
+ message strcharinfo(0), "Pumpkin : Ouch, this pumpkin is totally poisonous! Let's get away from them!";
misceffect FX_PUMPKIN_EXPLOSION, strcharinfo(0);
heal -150,0;
sc_start sc_poison, 1, 60;
- end;
+ goto L_Destroy;
L_HeavyPoison1:
set @discover_poisonous_pumpkin, @discover_poisonous_pumpkin + 1;
- message strcharinfo(0), "This is really awful! I should not touch them!";
+ message strcharinfo(0), "Pumpkin : This is really awful! I should not touch them!";
misceffect FX_PUMPKIN_EXPLOSION, strcharinfo(0);
heal -350,0;
sc_start sc_poison, 1, 120;
- end;
+ goto L_Destroy;
L_HeavyPoison2:
set @discover_poisonous_pumpkin, @discover_poisonous_pumpkin + 1;
misceffect FX_PUMPKIN_EXPLOSION, strcharinfo(0);
heal -Hp, 0;
+ goto L_Destroy;
+
+OnAppear:
+ fakenpcname strnpcinfo(0), strnpcinfo(0), 1063; // set the sprite (implies enablenpc)
+ end;
+
+L_Destroy:
+ disablenpc strnpcinfo(0); // makes the npc invisible, unclickable
+ addnpctimer .death_t, strnpcinfo(0) + "::OnReallyDestroy"; // schedule a respawn
end;
+OnReallyDestroy:
+ set .nodes[.i], get(.nodes[.i], "_N-Pumpkin") - 1, "_N-Pumpkin"; // tell the puppeteer we lost an egg
+ destroy;
+
+
+//////////////////////////////////
+// puppeteer logic below
+
+S_MakeNode:
+ set .nID, .nID + 1; // give the node an id
+ set .@name$, "#_Pkin" + chr(3) + .nID;
+ goto S_FindXY;
+
+S_FindXY:
+ set .@x, rand(.x1[.i], .x2[.i]);
+ set .@y, rand(.y1[.i], .y2[.i]);
+ if (iscollision(.m$[.i], .@x, .@y) == 1)
+ goto S_FindXY;
+ goto S_ReallySpawn;
+
+S_ReallySpawn:
+ set .@p, puppet(.m$[.i], .@x, .@y, .@name$, 32767); // spawn the node (but not on map, because 32767)
+ disablenpc .@name$; // make sure it can't be clicked by guessing the being id
+ set .i, .i, .@p; // tell the puppet what object contains it
+ set .death_t, rand(.death_t/2, .death_t), .@p; // tell the puppet when to die
+ set .@timer, if_then_else(.done_initial[.i], rand(.appear_t/2, .appear_t), 0); // timer depends on if first spawn or if respawned after death
+ addnpctimer .@timer, .@name$+"::OnAppear"; // we spawn the node instantly but it only appears after the timer
+ if (.nID == 2147483647)
+ set .nID, 0; // start over if id = 0x7FFFFFFF
+ return;
+
+S_IterateObjects:
+ if (.min_nodes[.i] == 0)
+ set .min_nodes[.i], (.min * min(1, ((.x2[.i] - .x1[.i]) * (.y2[.i] - .y1[.i])) / .divisor));
+ if (.max_nodes[.i] == 0)
+ set .max_nodes[.i], (.max * max(1, ((.x2[.i] - .x1[.i]) * (.y2[.i] - .y1[.i])) / .divisor));
+
+ if (.nodes[.i] >= .max_nodes[.i])
+ goto S_NextObject;
+
+ set .nodes[.i], .nodes[.i] + 1;
+ callsub S_MakeNode;
+ if (.nodes[.i] < if_then_else(.done_initial[.i], .min_nodes[.i], .max_nodes[.i]))
+ goto S_IterateObjects;
+ goto S_NextObject;
+
+S_NextObject:
+ set .done_initial[.i], 1;
+ if (.i >= (.count - 1))
+ goto S_Return;
+ set .i, .i + 1; // object iterator++
+ goto S_IterateObjects;
+
+S_Return:
+ return;
+
+OnHeartbeat:
+ set .i, 0; // object iterator
+ freeloop 1;
+ callsub S_IterateObjects;
+ freeloop 0;
+ addnpctimer .spawn_t, strnpcinfo(0) + "::OnHeartbeat"; // heartbeat
+ end;
+
+OnMaybeStart:
+ if (.x1[1] == 0)
+ end;
+ set .min, 0; // relative min number of nodes per object => (min * (((x2 - x1) * (y2 - y1)) / divisor))
+ set .max, 5; // relative max number of nodes per object => (max * (((x2 - x1) * (y2 - y1)) / divisor))
+ set .divisor, 32; // see .min & .max ^
+ set .count, getarraysize(.x1); // number of nodes objects in TSX
+ set .spawn_t, 18000; // heartbeat rate
+ set .death_t, 1000; // rand(timer/2, timer) before a node triggers respawn after death
+ set .appear_t, 40000; // rand(timer/2, timer) before a node becomes visible after spawn
+ if (.started)
+ end;
+ set .started, 1;
+ addnpctimer 10000, strnpcinfo(0)+"::OnHeartbeat"; // first heartbeat
+ end;
}
diff --git a/world/map/npc/055-3/_import.txt b/world/map/npc/055-3/_import.txt
index b1073d34..82962c3f 100644
--- a/world/map/npc/055-3/_import.txt
+++ b/world/map/npc/055-3/_import.txt
@@ -2,5 +2,6 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 055-3
npc: npc/055-3/_mobs.txt
+npc: npc/055-3/_nodes.txt
npc: npc/055-3/_warps.txt
npc: npc/055-3/mapflags.txt
diff --git a/world/map/npc/055-3/_mobs.txt b/world/map/npc/055-3/_mobs.txt
index bc14b844..686b2172 100644
--- a/world/map/npc/055-3/_mobs.txt
+++ b/world/map/npc/055-3/_mobs.txt
@@ -1,47 +1,11 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Cave mobs
-055-3,45,44,20,14|monster|RedSlime|1008,10,10000ms,60000ms,Mob055-3::On1008
-055-3,0,0,1,1|monster|Bat|1017,20,10000ms,45000ms,Mob055-3::On1017
-055-3,53,75,28,40|monster|YellowSlime|1007,10,10000ms,60000ms,Mob055-3::On1007
-055-3,0,0,1,1|monster|BlackScorpion|1009,8,10000ms,35000ms,Mob055-3::On1009
-055-3,0,0,1,1|monster|Spider|1012,8,10000ms,35000ms,Mob055-3::On1012
-055-3,0,0,1,1|monster|Snake|1010,3,10000ms,20000ms,Mob055-3::On1010
-055-3,46,44,14,18|monster|Spider|1012,3,50000ms,100000ms,Mob055-3::On1012
-055-3,52,78,36,23|monster|BlackScorpion|1009,3,50000ms,100000ms,Mob055-3::On1009
-
-
-055-3,0,0,0|script|Mob055-3|32767
-{
- end;
-
-On1007:
- set @mobID, 1007;
- callfunc "MobPoints";
- end;
-
-On1008:
- set @mobID, 1008;
- callfunc "MobPoints";
- end;
-
-On1009:
- set @mobID, 1009;
- callfunc "MobPoints";
- end;
-
-On1010:
- set @mobID, 1010;
- callfunc "MobPoints";
- end;
-
-On1012:
- set @mobID, 1012;
- callfunc "MobPoints";
- end;
-
-On1017:
- set @mobID, 1017;
- callfunc "MobPoints";
- end;
-}
+055-3,45,44,20,14|monster|RedSlime|1008,10,10000ms,60000ms
+055-3,0,0,1,1|monster|Bat|1017,20,10000ms,45000ms
+055-3,53,75,28,40|monster|YellowSlime|1007,10,10000ms,60000ms
+055-3,0,0,1,1|monster|BlackScorpion|1009,8,10000ms,35000ms
+055-3,0,0,1,1|monster|Spider|1012,8,10000ms,35000ms
+055-3,0,0,1,1|monster|Snake|1010,3,10000ms,20000ms
+055-3,46,44,14,18|monster|Spider|1012,3,50000ms,100000ms
+055-3,52,78,36,23|monster|BlackScorpion|1009,3,50000ms,100000ms
diff --git a/world/map/npc/055-3/_nodes.txt b/world/map/npc/055-3/_nodes.txt
new file mode 100644
index 00000000..ed02d5dc
--- /dev/null
+++ b/world/map/npc/055-3/_nodes.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Cave nodes
+
+// (no nodes)
diff --git a/world/map/npc/056-2/_import.txt b/world/map/npc/056-2/_import.txt
index 4a48c0f5..79dda260 100644
--- a/world/map/npc/056-2/_import.txt
+++ b/world/map/npc/056-2/_import.txt
@@ -2,6 +2,7 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 056-2
npc: npc/056-2/_mobs.txt
+npc: npc/056-2/_nodes.txt
npc: npc/056-2/_warps.txt
npc: npc/056-2/barrier.txt
npc: npc/056-2/mapflags.txt
diff --git a/world/map/npc/056-2/_mobs.txt b/world/map/npc/056-2/_mobs.txt
index 267e0d8a..487fdc8d 100644
--- a/world/map/npc/056-2/_mobs.txt
+++ b/world/map/npc/056-2/_mobs.txt
@@ -1,9 +1,3 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Mirak's House mobs
-
-
-056-2,0,0,0|script|Mob056-2|32767
-{
- end;
-}
diff --git a/world/map/npc/056-2/_nodes.txt b/world/map/npc/056-2/_nodes.txt
new file mode 100644
index 00000000..597f2336
--- /dev/null
+++ b/world/map/npc/056-2/_nodes.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Mirak's House nodes
+
+// (no nodes)
diff --git a/world/map/npc/057-1/_import.txt b/world/map/npc/057-1/_import.txt
index 5ccd6889..2a668bd7 100644
--- a/world/map/npc/057-1/_import.txt
+++ b/world/map/npc/057-1/_import.txt
@@ -2,5 +2,6 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 057-1
npc: npc/057-1/_mobs.txt
+npc: npc/057-1/_nodes.txt
npc: npc/057-1/_warps.txt
npc: npc/057-1/mapflags.txt
diff --git a/world/map/npc/057-1/_mobs.txt b/world/map/npc/057-1/_mobs.txt
index 5988ce83..865607ee 100644
--- a/world/map/npc/057-1/_mobs.txt
+++ b/world/map/npc/057-1/_mobs.txt
@@ -1,82 +1,21 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Woodland mobs
-057-1,0,0,0,0|monster|MauvePlant|1029,5,45000ms,45000ms,Mob057-1::On1029
-057-1,0,0,0,0|monster|CobaltPlant|1030,3,10000ms,65000ms,Mob057-1::On1030
-057-1,0,0,0,0|monster|GambogePlant|1031,5,10000ms,45000ms,Mob057-1::On1031
-057-1,0,0,0,0|monster|AlizarinPlant|1032,7,10000ms,70000ms,Mob057-1::On1032
-057-1,0,0,0,0|monster|Mouboo|1028,14,10000ms,45000ms,Mob057-1::On1028
-057-1,95,42,29,9|monster|Butterfly|1055,3,10000ms,40000ms,Mob057-1::On1055
-057-1,25,48,11,46|monster|Silkworm|1035,7,10000ms,15000ms,Mob057-1::On1035
-057-1,99,40,22,16|monster|PinkFlower|1014,2,10000ms,45000ms,Mob057-1::On1014
-057-1,100,30,19,11|monster|Butterfly|1055,2,10000ms,40000ms,Mob057-1::On1055
-057-1,83,64,12,12|monster|Butterfly|1055,2,10000ms,40000ms,Mob057-1::On1055
-057-1,59,34,8,11|monster|Butterfly|1055,2,10000ms,40000ms,Mob057-1::On1055
-057-1,32,45,8,11|monster|Butterfly|1055,2,10000ms,40000ms,Mob057-1::On1055
-057-1,144,35,12,12|monster|Butterfly|1055,2,10000ms,40000ms,Mob057-1::On1055
-057-1,104,67,12,11|monster|PinkFlower|1014,2,10000ms,45000ms,Mob057-1::On1014
-057-1,135,53,12,11|monster|PinkFlower|1014,2,10000ms,45000ms,Mob057-1::On1014
-057-1,0,0,0,0|monster|SpikyMushroom|1019,10,10000ms,45000ms,Mob057-1::On1019
-057-1,0,0,0,0|monster|CloverPatch|1037,3,10000ms,180000ms,Mob057-1::On1037
-057-1,27,46,14,52|monster|Squirrel|1038,6,10000ms,50000ms,Mob057-1::On1038
-
-
-057-1,0,0,0|script|Mob057-1|32767
-{
- end;
-
-On1014:
- set @mobID, 1014;
- callfunc "MobPoints";
- end;
-
-On1019:
- set @mobID, 1019;
- callfunc "MobPoints";
- end;
-
-On1028:
- set @mobID, 1028;
- callfunc "MobPoints";
- end;
-
-On1029:
- set @mobID, 1029;
- callfunc "MobPoints";
- end;
-
-On1030:
- set @mobID, 1030;
- callfunc "MobPoints";
- end;
-
-On1031:
- set @mobID, 1031;
- callfunc "MobPoints";
- end;
-
-On1032:
- set @mobID, 1032;
- callfunc "MobPoints";
- end;
-
-On1035:
- set @mobID, 1035;
- callfunc "MobPoints";
- end;
-
-On1037:
- set @mobID, 1037;
- callfunc "MobPoints";
- end;
-
-On1038:
- set @mobID, 1038;
- callfunc "MobPoints";
- end;
-
-On1055:
- set @mobID, 1055;
- callfunc "MobPoints";
- end;
-}
+057-1,0,0,0,0|monster|MauvePlant|1029,5,45000ms,45000ms
+057-1,0,0,0,0|monster|CobaltPlant|1030,3,10000ms,65000ms
+057-1,0,0,0,0|monster|GambogePlant|1031,5,10000ms,45000ms
+057-1,0,0,0,0|monster|AlizarinPlant|1032,7,10000ms,70000ms
+057-1,0,0,0,0|monster|Mouboo|1028,14,10000ms,45000ms
+057-1,95,42,29,9|monster|Butterfly|1055,3,10000ms,40000ms
+057-1,25,48,11,46|monster|Silkworm|1035,7,10000ms,15000ms
+057-1,99,40,22,16|monster|PinkFlower|1014,2,10000ms,45000ms
+057-1,100,30,19,11|monster|Butterfly|1055,2,10000ms,40000ms
+057-1,83,64,12,12|monster|Butterfly|1055,2,10000ms,40000ms
+057-1,59,34,8,11|monster|Butterfly|1055,2,10000ms,40000ms
+057-1,32,45,8,11|monster|Butterfly|1055,2,10000ms,40000ms
+057-1,144,35,12,12|monster|Butterfly|1055,2,10000ms,40000ms
+057-1,104,67,12,11|monster|PinkFlower|1014,2,10000ms,45000ms
+057-1,135,53,12,11|monster|PinkFlower|1014,2,10000ms,45000ms
+057-1,0,0,0,0|monster|SpikyMushroom|1019,10,10000ms,45000ms
+057-1,0,0,0,0|monster|CloverPatch|1037,3,10000ms,180000ms
+057-1,27,46,14,52|monster|Squirrel|1038,6,10000ms,50000ms
diff --git a/world/map/npc/057-1/_nodes.txt b/world/map/npc/057-1/_nodes.txt
new file mode 100644
index 00000000..3bc0c2e9
--- /dev/null
+++ b/world/map/npc/057-1/_nodes.txt
@@ -0,0 +1,16 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Woodland nodes
+
+057-1,0,0,0|script|Node057-1|32767
+{
+ end;
+OnInit:
+ setarray .m$, "_N-Pumpkin", "057-1";
+ setarray .x1, "_N-Pumpkin", 25;
+ setarray .y1, "_N-Pumpkin", 25;
+ setarray .x2, "_N-Pumpkin", 35;
+ setarray .y2, "_N-Pumpkin", 37;
+ setarray .id, "_N-Pumpkin", 0;
+ donpcevent "_N-Pumpkin::OnMaybeStart";
+ destroy;
+}
diff --git a/world/map/npc/annuals/fathertime.txt b/world/map/npc/annuals/fathertime.txt
index 6d61f446..29406f63 100644
--- a/world/map/npc/annuals/fathertime.txt
+++ b/world/map/npc/annuals/fathertime.txt
@@ -6,17 +6,13 @@
OnInit:
if (debug >= 2) end;
- goto L_StartTimer;
-
-L_StartTimer:
- setnpctimer 0;
- initnpctimer;
+ donpcevent strnpcinfo(0) + "::OnTimer20000";
end;
OnTimer20000:
- setnpctimer 0;
donpcevent "#XmasConfig::OnCommandRestartQuest";
donpcevent "#HalloweenConfig::OnCommandRestartQuest";
+ donpcevent "Easter Eggs::OnCheckEaster";
initnpctimer;
end;
}
diff --git a/world/map/npc/annuals/halloween/debug.txt b/world/map/npc/annuals/halloween/debug.txt
index cbc918e2..8f3d066e 100644
--- a/world/map/npc/annuals/halloween/debug.txt
+++ b/world/map/npc/annuals/halloween/debug.txt
@@ -42,7 +42,6 @@ L_LastReset:
goto L_Debug;
L_HalloweenTimeKey:
- if (getgmlevel() < 20) goto L_Close;
mes "Halloween Time Key Change.";
mes "Start Month?";
input @halloween_time_key_smonth;
diff --git a/world/map/npc/annuals/xmas/debug.txt b/world/map/npc/annuals/xmas/debug.txt
index f0170a0d..6c513ff1 100644
--- a/world/map/npc/annuals/xmas/debug.txt
+++ b/world/map/npc/annuals/xmas/debug.txt
@@ -96,7 +96,6 @@ L_Reset:
goto L_Close;
L_XmasTimeKey:
- if (getgmlevel() < 20) goto L_Close;
mes "Xmas Time Key Change.";
mes "Start Month?";
input @xmas_time_key_smonth;
diff --git a/world/map/npc/botcheck/_import.txt b/world/map/npc/botcheck/_import.txt
index c54696ac..85374e51 100644
--- a/world/map/npc/botcheck/_import.txt
+++ b/world/map/npc/botcheck/_import.txt
@@ -2,5 +2,6 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: botcheck
npc: npc/botcheck/_mobs.txt
+npc: npc/botcheck/_nodes.txt
npc: npc/botcheck/_warps.txt
npc: npc/botcheck/mapflags.txt
diff --git a/world/map/npc/botcheck/_mobs.txt b/world/map/npc/botcheck/_mobs.txt
index 91d023cd..66a9726f 100644
--- a/world/map/npc/botcheck/_mobs.txt
+++ b/world/map/npc/botcheck/_mobs.txt
@@ -1,9 +1,3 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Botcheck Area mobs
-
-
-botcheck,0,0,0|script|Mobbotcheck|32767
-{
- end;
-}
diff --git a/world/map/npc/botcheck/_nodes.txt b/world/map/npc/botcheck/_nodes.txt
new file mode 100644
index 00000000..e72a6332
--- /dev/null
+++ b/world/map/npc/botcheck/_nodes.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Botcheck Area nodes
+
+// (no nodes)
diff --git a/world/map/npc/commands/_import.txt b/world/map/npc/commands/_import.txt
new file mode 100644
index 00000000..3cabe0b7
--- /dev/null
+++ b/world/map/npc/commands/_import.txt
@@ -0,0 +1,10 @@
+npc: npc/commands/_procedures.txt
+npc: npc/commands/zeny.txt
+npc: npc/commands/marry.txt
+npc: npc/commands/debug.txt
+npc: npc/commands/changesex.txt
+npc: npc/commands/class.txt
+npc: npc/commands/pullrabbit.txt
+npc: npc/commands/numa.txt
+npc: npc/commands/destroynpc.txt
+npc: npc/commands/remotecmd.txt
diff --git a/world/map/npc/commands/_procedures.txt b/world/map/npc/commands/_procedures.txt
new file mode 100644
index 00000000..732b496f
--- /dev/null
+++ b/world/map/npc/commands/_procedures.txt
@@ -0,0 +1,53 @@
+// ARGV Splitter
+// takes @args$ and splits it properly so that '@cmd "foo bar" baz' is ['foo bar','baz'] instead of ['"foo','bar"','baz']
+// input: @args$ (string)
+// output: @argv$ (array) and @argv (array)
+function|script|argv_splitter
+{
+ explode .@fragments$, @args$, " ";
+ set .@e, 0;
+ set .@total, getarraysize(.@fragments$);
+ set .@NULL$, chr(3); // HACK: we use .@NULL$ as a workaround because we can't do "\0"
+ goto L_Check;
+
+L_Check:
+ setarray .@check$[0], "", .@NULL$, .@NULL$;
+ explode .@check$, .@fragments$[.@e], "\""; // check if the fragment contains a quote
+ if (.@check$[0] == "" && .@check$[1] != .@NULL$ && .@check$[1] != "" && .@check$[2] == .@NULL$)
+ set .@string$, .@check$[1]; // begin substring
+ elif (.@check$[0] != "" && .@check$[1] == "" && .@check$[2] == .@NULL$)
+ goto L_EndSubString; // end substring
+ elif (.@string$ != "" && .@check$[0] != "" && .@check$[1] == .@NULL$ && .@check$[2] == .@NULL$)
+ set .@string$, .@string$ +" "+ .@check$[0]; // part of the substring
+ elif (.@check$[2] != .@NULL$) goto L_Set2; // the the argument is quoted but there is no space
+ else goto L_Set;
+ goto L_CheckAfter;
+
+L_Set:
+ setarray @argv$[.@t], .@check$[0]; // not in a substring so push right away
+ setarray @argv[.@t], .@check$[0]; // not in a substring so push right away
+ set .@t, .@t + 1;
+ goto L_CheckAfter;
+
+L_Set2:
+ setarray @argv$[.@t], .@check$[1]; // not in a substring so push right away
+ setarray @argv[.@t], .@check$[1]; // not in a substring so push right away
+ set .@t, .@t + 1;
+ goto L_CheckAfter;
+
+L_EndSubString:
+ set .@string$, .@string$ + " " + .@check$[0];
+ setarray @argv$[.@t], .@string$; // push in the array
+ setarray @argv[.@t], .@string$; // push in the array
+ set .@t, .@t + 1;
+ set .@string$, ""; // clean
+ goto L_CheckAfter;
+
+L_CheckAfter:
+ set .@e, .@e + 1;
+ if (.@e > .@total) goto L_Done; // the @argv$ array is built
+ goto L_Check; // not done yet
+
+L_Done:
+ return;
+}
diff --git a/world/map/npc/commands/changesex.txt b/world/map/npc/commands/changesex.txt
new file mode 100644
index 00000000..fca27645
--- /dev/null
+++ b/world/map/npc/commands/changesex.txt
@@ -0,0 +1,32 @@
+-|script|@changesex|32767
+{
+ callfunc "argv_splitter";
+ set .@n$, if_then_else(@argv$[1] != "", "char", "") + "changesex";
+ if (GM < CMD_CHANGESEX && GM < G_SYSOP) goto L_GM; // check if you can use it on self
+ set .@target_id, BL_ID;
+ if (@argv$[1] != "") set .@target_id, getcharid(3, @argv$[1]);
+ if (@argv$[1] != "" && !(isloggedin(.@target_id))) goto L_Failed; // do NOT fallback to self
+ if (@argv$[1] != "" && GM < CMD_CHARCHANGESEX && GM < G_SYSOP) goto L_GM; // when target is not self, use charchangesex permission
+
+ set .@s, 3; // default to non-binary
+ if (@argv$[0] == "M" || @argv$[0] == "m") set .@s, 1;
+ if (@argv$[0] == "F" || @argv$[0] == "f") set .@s, 0;
+ set Sex, .@s, .@target_id;
+ gmlog "@"+.@n$+" " + @args$;
+ message strcharinfo(0), .@n$+" : The operation succeeded.";
+ end;
+
+L_Failed:
+ // XXX: should we allow GMs to change sex of users that are not logged in?
+ message strcharinfo(0), .@n$+" : Impossible to attach to the target player. Did you try putting the name in \"quotation marks\"?";
+ end;
+
+L_GM:
+ message strcharinfo(0), .@n$+" : GM command is level "+ if_then_else(@argv$[1] != "", CMD_CHARCHANGESEX, CMD_CHANGESEX) +", but you are level " + GM;
+ end;
+
+OnInit:
+ registercmd chr(ATCMD_SYMBOL) + "changesex", strnpcinfo(0);
+ registercmd chr(ATCMD_SYMBOL) + "charchangesex", strnpcinfo(0);
+ end;
+}
diff --git a/world/map/npc/commands/class.txt b/world/map/npc/commands/class.txt
new file mode 100644
index 00000000..9143e08a
--- /dev/null
+++ b/world/map/npc/commands/class.txt
@@ -0,0 +1,31 @@
+-|script|@class|32767
+{
+ callfunc "argv_splitter";
+ set .@n$, if_then_else(@argv$[1] != "", "char", "") + "class";
+ if (GM < CMD_CLASS && GM < G_SYSOP) goto L_GM; // check if you can use it on self
+ set .@target_id, BL_ID;
+ if (@argv$[1] != "") set .@target_id, getcharid(3, @argv$[1]);
+ if (@argv$[1] != "" && !(isloggedin(.@target_id))) goto L_Failed; // do NOT fallback to self
+ if (@argv$[1] != "" && GM < CMD_CHARCLASS && GM < G_SYSOP) goto L_GM; // when target is not self, use charclass permission
+
+ set .@c, 1; // default to human
+ if (@argv[0] >= 1 || @argv[0] <= 32767) set .@c, @argv[0];
+ set Class, .@c, .@target_id;
+ gmlog "@"+.@n$+" " + @args$;
+ message strcharinfo(0), .@n$+" : The operation succeeded.";
+ end;
+
+L_Failed:
+ // XXX: should we allow GMs to change class of users that are not logged in?
+ message strcharinfo(0), .@n$+" : Impossible to attach to the target player. Did you try putting the name in \"quotation marks\"?";
+ end;
+
+L_GM:
+ message strcharinfo(0), .@n$+" : GM command is level "+ if_then_else(@argv$[1] != "", CMD_CHARCLASS, CMD_CLASS) +", but you are level " + GM;
+ end;
+
+OnInit:
+ registercmd chr(ATCMD_SYMBOL) + "class", strnpcinfo(0);
+ registercmd chr(ATCMD_SYMBOL) + "charclass", strnpcinfo(0);
+ end;
+}
diff --git a/world/map/npc/functions/debug.txt b/world/map/npc/commands/debug.txt
index 44af4d40..19ac4114 100755..100644
--- a/world/map/npc/functions/debug.txt
+++ b/world/map/npc/commands/debug.txt
@@ -3,9 +3,9 @@
function|script|Debug
{
if(!@debug_npc) goto L_Begin;
- mes "The debug NPCs have been deprecated. Please use this magic spell instead:";
+ mes "The debug NPCs have been deprecated. Please use this command instead:";
mes "";
- mes "%%E ##a"+ getspellinvocation("debug0") +"##0";
+ mes "%%E ##a@debug##0";
set @debug_npc, 0;
goto L_Close;
@@ -831,13 +831,13 @@ S_Update_Mask:
return;
L_GetAllMagic:
- setskill SKILL_MAGIC, 2;
- setskill SKILL_MAGIC_LIFE, 2;
- setskill SKILL_MAGIC_WAR, 2;
- setskill SKILL_MAGIC_TRANSMUTE, 2;
- setskill SKILL_MAGIC_NATURE, 2;
- setskill SKILL_MAGIC_ASTRAL, 2;
- setskill SKILL_MAGIC_DARK, 2;
+ setskill SKILL_MAGIC, 5;
+ setskill SKILL_MAGIC_LIFE, 5;
+ setskill SKILL_MAGIC_WAR, 5;
+ setskill SKILL_MAGIC_TRANSMUTE, 5;
+ setskill SKILL_MAGIC_NATURE, 5;
+ setskill SKILL_MAGIC_ASTRAL, 5;
+ setskill SKILL_MAGIC_DARK, 5;
set @mexp, 8000;
callsub S_Update_Mask;
mes "Magic skills added.";
@@ -869,13 +869,13 @@ L_AddAll:
setskill SKILL_RESIST_POISON, 9;
setskill SKILL_ASTRAL_SOUL, 9;
setskill SKILL_RAGING, 9;
- setskill SKILL_MAGIC, 2;
- setskill SKILL_MAGIC_LIFE, 2;
- setskill SKILL_MAGIC_WAR, 2;
- setskill SKILL_MAGIC_TRANSMUTE, 2;
- setskill SKILL_MAGIC_NATURE, 2;
- setskill SKILL_MAGIC_ASTRAL, 2;
- setskill SKILL_MAGIC_DARK, 2;
+ setskill SKILL_MAGIC, 5;
+ setskill SKILL_MAGIC_LIFE, 5;
+ setskill SKILL_MAGIC_WAR, 5;
+ setskill SKILL_MAGIC_TRANSMUTE, 5;
+ setskill SKILL_MAGIC_NATURE, 5;
+ setskill SKILL_MAGIC_ASTRAL, 5;
+ setskill SKILL_MAGIC_DARK, 5;
set @mexp, 8000;
resetstatus;
set BaseLevel, 99;
@@ -922,6 +922,20 @@ L_Close:
}
+-|script|Debug Spell|32767
+{
+ if(!debug && getgmlevel() < CMD_DEBUG) end;
+ callfunc "Debug";
+ end;
+OnDeprecated:
+ message strcharinfo(0), "Debug : ##3The #debug spell has been superseded by the ##B@debug##b command.";
+ end;
+OnInit:
+ registercmd "@debug", "Debug Spell";
+ registercmd "#debug", "Debug Spell::OnDeprecated";
+ end;
+}
+
029-2,30,26,0|script|Debug#0|154
{
set @debug_npc, 1;
diff --git a/world/map/npc/commands/destroynpc.txt b/world/map/npc/commands/destroynpc.txt
new file mode 100644
index 00000000..1ebede9e
--- /dev/null
+++ b/world/map/npc/commands/destroynpc.txt
@@ -0,0 +1,35 @@
+-|script|@destroynpc|32767
+{
+ callfunc "argv_splitter";
+ if (GM < CMD_DESTROYNPC && GM < G_SYSOP)
+ goto L_GM;
+
+ set .@id, getnpcid(@argv$[0]);
+ if (@argv$[0] == "" || .@id < 1)
+ goto L_Failed;
+ if (gettimetick(2) - @destroynpc[0] > 300 || @destroynpc[1] != .@id)
+ goto L_Confirm;
+
+ gmlog "@destroynpc " + @args$;
+ message strcharinfo(0), "destroynpc : The operation succeeded.";
+ debugmes "!!! => npc destroyed: `"+@argv$[0]+"` ("+.@id+")";
+ if (1==1) destroy .@id; // FIXME: allow destroy to work as a non-terminator when arg0 is given (TMWA)
+ end;
+
+L_Confirm:
+ message strcharinfo(0), "destroynpc : ##BDANGER ZONE!##b This command permanently destroys a npc and its puppets (if any). Use the command again to confirm.";
+ setarray @destroynpc[0], gettimetick(2), .@id;
+ end;
+
+L_Failed:
+ message strcharinfo(0), "destroynpc : Impossible to find the target npc. Did you try putting the name in \"quotation marks\"? Some npcs also have an invisible postfix in their name, ie `#_M`.";
+ end;
+
+L_GM:
+ message strcharinfo(0), "destroynpc : GM command is level "+ CMD_DESTROYNPC +", but you are level " + GM;
+ end;
+
+OnInit:
+ registercmd chr(ATCMD_SYMBOL) + "destroynpc", strnpcinfo(0);
+ end;
+}
diff --git a/world/map/npc/commands/marry.txt b/world/map/npc/commands/marry.txt
new file mode 100644
index 00000000..39efe6b8
--- /dev/null
+++ b/world/map/npc/commands/marry.txt
@@ -0,0 +1,69 @@
+-|script|special-marry|32767
+{
+ set .@target_id, getcharid(3, @args$);
+ if (.@target_id < 1 || !(isloggedin(.@target_id)) || .@target_id == BL_ID) goto L_NotFound;
+ if (PARTNER || get(PARTNER, .@target_id)) goto L_AlreadyMarried;
+ if (isin("014-1",29,36,34,39) == 0 && isin("001-1",20,27,22,27) == 0) goto L_NotInArea;
+ if (distance(BL_ID, .@target_id) != 1) goto L_AwayFromPartner;
+ if (BaseLevel < WEDDING_MIN_LEVEL || get(BaseLevel, .@target_id) < WEDDING_MIN_LEVEL) goto L_TooYoung;
+ if (getequipid(equip_shield) != 702 || getequipid(equip_shield, @args$) != 702) goto L_NoRing;
+
+ if (get(@marriage[0], .@target_id) == BL_ID) goto L_Proceed;
+
+ setarray @marriage[0], .@target_id, gettimetick(2);
+ addtimer (.timeout * 1000), strnpcinfo(0) + "::OnTimeout";
+ announce strcharinfo(0) + " is asking " + strcharinfo(0, .@target_id) + " for marriage.", 2;
+ message strcharinfo(0, .@target_id), "Marriage : ##3##B" + strcharinfo(0) + " wishes to marry you. To accept, write `##1#marry "+strcharinfo(0)+"##3` within the next "+.timeout+" seconds.";
+ end;
+
+L_NotFound:
+ message strcharinfo(0), "Marriage : ##3##BThe target player is either not found or yourself.";
+ end;
+
+L_TooYoung:
+ message strcharinfo(0), "Marriage : ##3##BYou and your partner need to be at least level "+ WEDDING_MIN_LEVEL +".";
+ end;
+
+L_NoRing:
+ message strcharinfo(0), "Marriage : ##3##BYou and your partner need to have ["+ getitemlink("WeddingRing") +"] equipped.";
+ end;
+
+L_AwayFromPartner:
+ message strcharinfo(0), "Marriage : ##3##BYou and your partner need to be standing next to each other.";
+ end;
+
+L_NotInArea:
+ message strcharinfo(0), "Marriage : ##3##BYou are not standing in a designated marriage area.";
+ end;
+
+L_Proceed:
+ if ((gettimetick(2) - .timeout) > get(@marriage[1], .@target_id)) goto L_TooLate;
+ set PARTNER, CHAR_ID, .@target_id;
+ if (PARTNER == get(CHAR_ID, .@target_id)) goto L_Success;
+ set PARTNER, 0, .@target_id;
+ set PARTNER, 0;
+ end;
+
+L_Success:
+ announce strcharinfo(0) + " and " + strcharinfo(0, .@target_id) + " are now married.", 2;
+ end;
+
+OnTimeout:
+ goto L_TooLate;
+
+L_TooLate:
+ message strcharinfo(0), "Marriage : ##3##BThe proposal expired. Please try again.";
+ message strcharinfo(0, @marriage[0]), "Marriage : ##3##BThe proposal expired. Please try again.";
+ set @marriage[0], 0, @marriage[0];
+ set @marriage[0], 0;
+ end;
+
+L_AlreadyMarried:
+ message strcharinfo(0), "Marriage : ##3##BYou"+ if_then_else(PARTNER, " are", "r partner is") +" already married.";
+ end;
+
+OnInit:
+ set .timeout, 30; // timeout for proposal
+ registercmd "#marry", strnpcinfo(0); // we NEED to use a # before `marry` because otherwise manaplus does not strip colors
+ end;
+}
diff --git a/world/map/npc/commands/numa.txt b/world/map/npc/commands/numa.txt
new file mode 100644
index 00000000..e8e8cabd
--- /dev/null
+++ b/world/map/npc/commands/numa.txt
@@ -0,0 +1,132 @@
+// all-in-one debug
+// author: meko
+
+-|script|SuperDebug|32767
+{
+ if (GM < MAP_LOUNGE && GM < G_SYSOP && !debug) goto L_GM2; // make sure you can enter the gm lounge
+ if (target(BL_ID,getnpcid("Numa"),1)) goto L_Main;
+ npcaction 6, 12;
+ title "Numa";
+ goto L_Main;
+
+L_GM2:
+ message strcharinfo(0), "numa : GM command is level "+ MAP_LOUNGE +", but you are level " + GM;
+ end;
+
+L_Main:
+ mes "How may I help you?";
+ next;
+ menu
+ "Announcements", L_StoneBoard,
+ "MOTD", L_MOTD,
+ "Holiday debug", L_Holiday,
+ "Event debug", L_Event,
+ "Quest debug", L_Quest,
+ "Who are you?", L_WhoAmI,
+ "Close", L_Close;
+ // todo: generic npcs
+ // todo: map list
+
+L_WhoAmI:
+ mes "I am Numa, also known as `SuperDebug`.";
+ mes "My sole purpose is to assist TMW staff from behind-the-scene.";
+ mes "Using me, you can access several debug menus.";
+ mes "You can call me from anywhere using the ##B@numa##b spell, or you can come see me in person.";
+ next;
+ goto L_Main;
+
+L_Holiday:
+ if (GM < DBG_HOLIDAY && GM < G_SYSOP) goto L_GM;
+ mes "What holiday do you want to debug?";
+ next;
+ menu
+ "Xmas.", L_XmasDebug,
+ "Halloween.", L_HalloweenDebug,
+ "Easter.", L_EasterDebug;
+
+L_XmasDebug:
+ gmlog strcharinfo(0) + " accessed the Xmas debug.";
+ callfunc "XmasDebug";
+ goto L_Close;
+
+L_HalloweenDebug:
+ gmlog strcharinfo(0) + " accessed the Halloween debug.";
+ callfunc "HalloweenDebug";
+ goto L_Close;
+
+L_EasterDebug:
+ gmlog strcharinfo(0) + " accessed the Easter debug.";
+ callfunc "Easter Debug";
+ goto L_Close;
+
+L_Event:
+ if (GM < EVT_DEBUG && GM < G_EVENT) goto L_GM;
+ gmlog strcharinfo(0) + " accessed the GM event debug.";
+ callfunc "GmDebug";
+ goto L_Close;
+
+L_StoneBoard:
+ if (GM < DBG_SCHEDULED && GM < G_SYSOP) goto L_GM;
+ callfunc "SBConfig";
+ goto L_Close;
+
+L_MOTD:
+ if (GM < DBG_MOTD && GM < G_SYSOP) goto L_GM;
+ callfunc "MOTDConfig";
+ goto L_Close;
+
+L_GM:
+ mes "I'm awfully sorry.";
+ mes "You do not have the required GM level to perform this action.";
+ goto L_Close;
+
+L_Quest:
+ callfunc "QuestDebug";
+ goto L_Close;
+
+L_Close:
+ close;
+
+OnInit:
+ registercmd chr(ATCMD_SYMBOL) + "numa", strnpcinfo(0);
+ registercmd chr(ATCMD_SYMBOL) + "superdebug", strnpcinfo(0);
+ void puppet("017-9", 30, 28, "Numa", 393);
+ end;
+}
+
+function|script|QuestDebug
+{
+ goto L_ChooseContinent;
+
+L_ChooseContinent:
+ mes "Choose a continent.";
+ next;
+ menu
+ "Argeas", L_Argeas,
+ "Close", L_Return;
+
+L_Argeas:
+ mes "Choose an area.";
+ next;
+ menu
+ "Woodland", L_Woodland,
+ "Choose a continent", L_ChooseContinent,
+ "Close", L_Return;
+
+L_Woodland:
+ mes "Choose a quest.";
+ next;
+ menu
+ "Illia Sisters", L_Valia,
+ "Choose an area", L_Argeas,
+ "Close", L_Return;
+
+L_Return:
+ return;
+
+//////////////////////////////
+
+L_Valia:
+ callfunc "IlliaDebug";
+ goto L_Return;
+}
diff --git a/world/map/npc/items/magic_gm_top_hat.txt b/world/map/npc/commands/pullrabbit.txt
index 129aa5c0..022f3753 100644
--- a/world/map/npc/items/magic_gm_top_hat.txt
+++ b/world/map/npc/commands/pullrabbit.txt
@@ -1,21 +1,25 @@
-function|script|ActivateMagicGMTophat
+-|script|@pullrabbit|32767
{
- if (getgmlevel() < 60) goto L_Return;
+ if (GM < EVT_KILLTHEGM && GM < G_SYSOP) end;
+ if (getequipid(equip_head) != 888) end;
getinventorylist;
if ((checkweight("MurdererCrown", 1) == 0) || (@inventorylist_count == 100))
goto L_Inventory;
// Get the current reward of the event. This may be changed later
getitem "MurdererCrown", 1;
+ // Set HP and SP to max
+ heal MaxHp, MaxSp;
// Display an effect
misceffect FX_CHANNELLING_CAST, strcharinfo(0);
// Log the usage of this spell
gmlog strcharinfo(0)+" used the Magic GM Top Hat.";
- return;
+ end;
L_Inventory:
message strcharinfo(0), "You cannot create this item. You're too heavy or you don't have a free slot.";
- return;
+ end;
-L_Return:
- return;
+OnInit:
+ registercmd chr(ATCMD_SYMBOL) + "pullrabbit", strnpcinfo(0);
+ end;
}
diff --git a/world/map/npc/commands/remotecmd.txt b/world/map/npc/commands/remotecmd.txt
new file mode 100644
index 00000000..b8c47f35
--- /dev/null
+++ b/world/map/npc/commands/remotecmd.txt
@@ -0,0 +1,62 @@
+-|script|@remotecmd|32767
+{
+ callfunc "argv_splitter";
+ if (GM < CMD_REMOTECMD && GM < G_SYSOP) goto L_GM; // check if you can use it on self
+ set .@target_id, BL_ID;
+ set .@t$, @argv$[1];
+ setarray @remotecmd[0], 0, 1, 1; // nr, to_self, multi_target
+ if (.@t$ == "map") goto L_Map;
+ if (.@t$ == "map!") goto L_AllMap;
+ if (.@t$ == "area") goto L_Area;
+ if (.@t$ == "area!") goto L_AllArea;
+ if (.@t$ != "") set .@target_id, getcharid(3, @argv$[1]);
+ if (.@t$ != "" && !(isloggedin(.@target_id))) goto L_Failed; // do NOT fallback to self
+
+ set @target_id, .@target_id;
+ set @remotecmd[2], 0; // only one target
+ addtimer 0, strnpcinfo(0) + "::OnPC";
+ end;
+
+L_Map:
+ set @remotecmd[1], 0; // do not include self
+ goto L_AllMap;
+
+L_AllMap:
+ foreach 0, getmap(), 0, 0, 32767, 32767, strnpcinfo(0)+"::OnPC";
+ goto L_Success;
+
+L_Area:
+ set @remotecmd[1], 0; // do not include self
+ goto L_AllMap;
+
+L_AllArea:
+ foreach 0, getmap(), (POS_X - .range), (POS_Y - .range), (POS_X + .range), (POS_Y + .range), strnpcinfo(0)+"::OnPC";
+ goto L_Success;
+
+OnPC:
+ if (@target_id == BL_ID && @remotecmd[1] < 1)
+ end;
+ remotecmd @argv$[0], strcharinfo(0, @target_id);
+ set @remotecmd[0], @remotecmd[0] + 1;
+ if (@remotecmd[2] < 1)
+ goto L_Success;
+ end;
+
+L_Success:
+ gmlog "@remotecmd " + @args$;
+ message strcharinfo(0), "remotecmd : The operation succeeded. ["+ @remotecmd[0] + "]";
+ end;
+
+L_Failed:
+ message strcharinfo(0), "remotecmd : Impossible to attach to the target player. Did you try putting the name in \"quotation marks\"?";
+ end;
+
+L_GM:
+ message strcharinfo(0), "remotecmd : GM command is level "+ CMD_REMOTECMD +", but you are level " + GM;
+ end;
+
+OnInit:
+ set .range, 14; // visible range
+ registercmd chr(ATCMD_SYMBOL) + "remotecmd", strnpcinfo(0);
+ end;
+}
diff --git a/world/map/npc/commands/zeny.txt b/world/map/npc/commands/zeny.txt
new file mode 100644
index 00000000..513330b5
--- /dev/null
+++ b/world/map/npc/commands/zeny.txt
@@ -0,0 +1,79 @@
+-|script|@zeny|32767
+{
+ callfunc "argv_splitter";
+ set .@n$, if_then_else(@argv$[1] != "", "char", "") + "zeny";
+ if (GM < CMD_ZENY && GM < G_SYSOP) goto L_GM; // check if you can use it on self
+ set .@target_id, BL_ID;
+ if (@argv$[1] != "") set .@target_id, getcharid(3, @argv$[1]);
+ if (@argv$[1] != "" && !(isloggedin(.@target_id))) goto L_Failed; // do NOT fallback to self
+ if (@argv$[1] != "" && GM < CMD_CHARZENY && GM < G_SYSOP) goto L_GM; // when target is not self, use charzeny permission
+ if (@argv$[0] == "--") goto L_Remove;
+ if (@argv$[0] == "---") goto L_RemoveAll;
+ if (@argv$[0] == "++") goto L_Max;
+ if (@argv$[0] == "+++") goto L_MaxAll;
+ set .@delta, @argv[0]; // ± zeny
+ set .@zeny, get(Zeny, .@target_id); // get the number of zeny in char
+ set .@bank, get(#BankAccount, .@target_id); // get number of zeny in (world) account
+ set .@new_zeny, .@zeny + .@delta; // new balance in char
+ if (.@new_zeny < 0) goto L_MaybeRemoveBank; // zeny would be below 0 so check if we can take from bank
+ if (.@new_zeny > .max_zeny) goto L_MaybeAddBank; // zeny would be over the limit so check if we can store in bank
+ set Zeny, (.@zeny + .@delta), .@target_id;
+ goto L_Success;
+
+L_Remove:
+ set Zeny, 0, .@target_id;
+ goto L_Success;
+
+L_RemoveAll:
+ set Zeny, 0, .@target_id;
+ set #BankAccount, 0, .@target_id;
+ goto L_Success;
+
+L_Max:
+ set Zeny, .max_zeny, .@target_id;
+ goto L_Success;
+
+L_MaxAll:
+ set Zeny, .max_zeny, .@target_id;
+ set #BankAccount, .max_int, .@target_id;
+ goto L_Success;
+
+L_MaybeAddBank:
+ set .@new_bank, (.@bank + (.@new_zeny - .max_zeny));
+ if (.@new_bank > .max_int || .@new_bank < 0) goto L_OutOfBounds;
+ set Zeny, .max_zeny, .@target_id;
+ set #BankAccount, .@new_bank, .@target_id;
+ goto L_Success;
+
+L_MaybeRemoveBank:
+ if ((.@bank + .@new_zeny) < 0) goto L_OutOfBounds;
+ set Zeny, 0, .@target_id;
+ set #BankAccount, (.@bank + .@new_zeny), .@target_id;
+ goto L_Success;
+
+L_OutOfBounds:
+ // XXX: maybe we could also take from other chars from the same accout?
+ message strcharinfo(0), .@n$+" : Impossible to proceed! This would cause the player to have less than 0 zeny or more than " + .max_int + ".";
+ end;
+
+L_Failed:
+ // XXX: should we allow GMs to change zeny of users that are not logged in?
+ message strcharinfo(0), .@n$+" : Impossible to attach to the target player. Did you try putting the name in \"quotation marks\"?";
+ end;
+
+L_Success:
+ gmlog "@zeny " + @args$;
+ message strcharinfo(0), .@n$+" : The operation succeeded.";
+ end;
+
+L_GM:
+ message strcharinfo(0), .@n$+" : GM command is level "+ if_then_else(@argv$[1] != "", CMD_CHARZENY, CMD_ZENY) +", but you are level " + GM;
+ end;
+
+OnInit:
+ set .max_zeny, 1000000000; // hardcoded in tmwa
+ set .max_int, 2147483647; // max int32 value
+ registercmd chr(ATCMD_SYMBOL) + "zeny", strnpcinfo(0);
+ registercmd chr(ATCMD_SYMBOL) + "charzeny", strnpcinfo(0);
+ end;
+}
diff --git a/world/map/npc/functions/clear_vars.txt b/world/map/npc/functions/clear_vars.txt
index ee09071e..aa3f700a 100644
--- a/world/map/npc/functions/clear_vars.txt
+++ b/world/map/npc/functions/clear_vars.txt
@@ -264,12 +264,13 @@ S_Remove_Skills:
return;
S_Misc:
- if(Death_Kill) set Death_Kill, 0;
+ set Death_Kill, 0;
set Scorp, 0; // Tulimshar and Mine Variables which aren't used anymore
set Bugleg, 0; // Tulimshar and Mine Variables which aren't used anymore
set KatzeBeenOutside, 0; // variable was moved to a temporary player variable
set LastHiss, 0; // variable was moved to Nibble 1 of the variable Katze
set CaveSnakeLamp, 0; // quest was turned into a Daily Quest, so the variable isn't needed anymore
+ set MAGIC_CAST_TICK, 0; // legacy stuff
return;
S_Tutorial:
diff --git a/world/map/npc/functions/default_npc_checks.txt b/world/map/npc/functions/default_npc_checks.txt
index da080e82..cc5c4086 100644
--- a/world/map/npc/functions/default_npc_checks.txt
+++ b/world/map/npc/functions/default_npc_checks.txt
@@ -9,6 +9,7 @@ function|script|PCtoNPCRange
set @npc_check, 0;
set @Nmap$, strnpcinfo(3);
if(!@npc_distance) set @npc_distance, 4; // <== default distance
+ if(@npc_distance == (1-2)) set @npc_distance, ATTACKRANGE;
cleararray @npc_loc, 0, 3;
setarray @npc_loc, getnpcx(), getnpcy(), @npc_distance;
set @Nx1, (@npc_loc[0] - @npc_loc[2]);
diff --git a/world/map/npc/functions/game_rules.txt b/world/map/npc/functions/game_rules.txt
index e2b9df81..316ee03f 100644
--- a/world/map/npc/functions/game_rules.txt
+++ b/world/map/npc/functions/game_rules.txt
@@ -2,7 +2,24 @@
function|script|GameRules
{
- mes "[Game Rules]";
+ mes "##BPlease click submit.";
+ requestlang .@cl$; // newer clients will automatically submit and skip ahead
+ clear;
+ title "Game Rules";
+ explode .@l$, .@cl$, "_";
+ if (.@l$[0] == "en") goto L_English;
+ if (.@l$[0] == "nl") goto L_Dutch;
+ if (.@l$[0] == "de") goto L_German;
+ if (.@l$[0] == "da") goto L_Danish;
+ if (.@l$[0] == "fr") goto L_French;
+ if (.@l$[0] == "es") goto L_Spanish;
+ if (.@l$[0] == "sv") goto L_Swedish;
+ if (.@l$[0] == "pt") goto L_Portuguese;
+ if (.@l$[0] == "pl") goto L_Polish;
+ if (.@l$[0] == "it") goto L_Italian;
+ if (.@l$[0] == "zh") goto L_zhHant;
+ if (.@l$[0] == "ru") goto L_Russian;
+
mes "Please select a language:";
menu
"English", L_English,
diff --git a/world/map/npc/functions/global_event_handler.txt b/world/map/npc/functions/global_event_handler.txt
index d5c20b06..4d453c83 100644
--- a/world/map/npc/functions/global_event_handler.txt
+++ b/world/map/npc/functions/global_event_handler.txt
@@ -21,13 +21,16 @@ OnPCKillEvent:
callfunc "elanore_decrease_exp"; // decrease heal exp for doing bad things
end;
-OnPCKilledEvent:
- callfunc "fightclub_event_killed"; // this is used by the 1v1 arena
+OnMobKillEvent:
+ callfunc "MobPoints";
end;
OnPCDieEvent:
callfunc "fightclub_GoBack"; // this used by the battle master
- callfunc "fightclub_event_die"; // this is used by the 1v1 arena
+ //callfunc "fightclub_event_die"; // this is used by the 1v1 arena
+ set @necromancer, 0;
+ set @_M_BLOCK, 0; // reset magic block on death
+ set @killerrid, 0; // reset killer rid
end;
OnInit:
diff --git a/world/map/npc/functions/hug.txt b/world/map/npc/functions/hug.txt
new file mode 100644
index 00000000..a663ea1d
--- /dev/null
+++ b/world/map/npc/functions/hug.txt
@@ -0,0 +1,24 @@
+-|script|nonmagic-hug|32767
+{
+ explode .@name$[0], @args$, "*"; // strip the trailing *
+ set @target_id, if_then_else(.@name$[0], getcharid(3, .@name$[0]), BL_ID);
+ if (@target_id < 1 || !(isloggedin(@target_id))) set @target_id, BL_ID; // fallback to self
+ if (.@name$[0] == "Tree" || .@name$[0] == "tree") set @target_id, .tree_id;
+ set .@range, 3;
+ if (distance(BL_ID, @target_id) >= .@range) end;
+ misceffect FX_HUG, strcharinfo(0);
+ if (@target_id != BL_ID) misceffect FX_HUG, @target_id;
+ if (@target_id != .tree_id) end;
+ callfunc "QuestTreeTouch";
+ close;
+
+OnInit:
+ set .tree_id, getnpcid("#DruidTree0#_M");
+ registercmd "hug", strnpcinfo(0);
+ registercmd "*hug", strnpcinfo(0);
+ registercmd "*hug*", strnpcinfo(0);
+ registercmd "hugs", strnpcinfo(0);
+ registercmd "*hugs", strnpcinfo(0);
+ registercmd "*hugs*", strnpcinfo(0);
+ end;
+}
diff --git a/world/map/npc/functions/quiz.txt b/world/map/npc/functions/quiz.txt
index ea10a3c4..0f2f7c87 100644
--- a/world/map/npc/functions/quiz.txt
+++ b/world/map/npc/functions/quiz.txt
@@ -1,3 +1,8 @@
+// FIXME/TODO: some variables should be scoped, and some other variables
+// combined in an array, with a very specific name, to avoid
+// collisions. The script as a whole should be optimized to
+// take advangage of magic-v3
+
function|script|MultiQuiz
{
if((getarraysize(@quiz_answers$) != getarraysize(@quiz_questions$)) ||
diff --git a/world/map/npc/functions/strangerquiz.txt b/world/map/npc/functions/strangerquiz.txt
deleted file mode 100644
index 8da3f65a..00000000
--- a/world/map/npc/functions/strangerquiz.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-
-function|script|StrangerQuiz
-{
- // param @quizparam$$
- // return in @quizanswer$
- set @quizanswer$, getspellinvocation(@quizparam$);
- return;
-}
diff --git a/world/map/npc/functions/superdebug.txt b/world/map/npc/functions/superdebug.txt
deleted file mode 100644
index 5654dd4c..00000000
--- a/world/map/npc/functions/superdebug.txt
+++ /dev/null
@@ -1,65 +0,0 @@
-// all-in-one debug
-// author: meko
-
-function|script|SuperDebug
-{
- if(@from_npc) goto L_Main;
- npcaction 6, 12;
- title "Numa";
- goto L_Main;
-
-L_Main:
- set @from_npc, 0;
- mes "[Numa]";
- mes "How may I help you?";
- next;
- menu
- "Announcements", L_StoneBoard,
- "MOTD", L_MOTD,
- "Holiday debug", L_Holiday,
- "Event debug", L_Event;
- // todo: generic npcs (in a future PR)
- // todo: map list (in a future PR)
- // todo: quest log debug (in a future PR)
-
-L_Holiday:
- if(getgmlevel() < 40) goto L_GM;
- mes "[Numa]";
- mes "What holiday do you want to debug?";
- next;
- menu
- "Xmas.", L_XmasDebug,
- "Halloween.", L_HalloweenDebug;
-
-L_XmasDebug:
- gmlog strcharinfo(0) + " accessed the Xmas debug.";
- callfunc "XmasDebug";
- end;
-
-L_HalloweenDebug:
- gmlog strcharinfo(0) + " accessed the Halloween debug.";
- callfunc "HalloweenDebug";
- end;
-
-L_Event:
- if(getgmlevel() < 60) goto L_GM;
- gmlog strcharinfo(0) + " accessed the GM event debug.";
- callfunc "GmDebug";
- close;
-
-L_StoneBoard:
- if (getgmlevel() < 30) goto L_GM;
- callfunc "SBConfig";
- close;
-
-L_MOTD:
- if (getgmlevel() < 40) goto L_GM;
- callfunc "MOTDConfig";
- close;
-
-L_GM:
- mes "[Numa]";
- mes "I'm awfully sorry.";
- mes "You do not have the required GM level to perform this action.";
- close;
-}
diff --git a/world/map/npc/items/check_wand.txt b/world/map/npc/items/check_wand.txt
index 5a339049..93993c53 100644
--- a/world/map/npc/items/check_wand.txt
+++ b/world/map/npc/items/check_wand.txt
@@ -1,67 +1,2 @@
// Wands
// Author: Wushin
-function|script|WandMana
-{
- if(isin("009-7", $@fightclub_x1, $@fightclub_y1, $@fightclub_x2, $@fightclub_y2) && ((@Duel_Fighter != 1) || ($@Duel_NoMagic == 1)))
- goto L_Return;
- callfunc "CheckWand";
- set @WandCost, (@Wand * (BaseLevel / 15) + 2);
- set @WandAttack, 0;
- if (!(@Wand))
- goto L_NoWand;
- if (Sp >= @WandCost)
- goto L_Attack;
- goto L_LowSp;
-
-L_Attack:
- set Sp, (Sp - @WandCost);
- set @WandAttack, 1;
- goto L_Return;
-
-L_NoWand:
- message strcharinfo(0), "You need a wand Equipped!";
- set @WandAttack, 0;
- goto L_Return;
-
-L_LowSp:
- message strcharinfo(0), "Out of Mana";
- set @WandAttack, 0;
- goto L_Return;
-
-L_Return:
- return;
-}
-function|script|CheckWand
-{
- setarray $@Wands, 758, 1171;
- setarray $@WandsPwr, 2, 1;
- setarray $@WandsAnim, 35, 33;
- set @Wand, 0;
- set @wand_loop, 0;
- goto L_Loop;
-
-L_Loop:
- if ((getequipid(equip_hand1) == $@Wands[@wand_loop]) || (getequipid(equip_hand2) == $@Wands[@wand_loop]))
- goto L_SetWand;
- goto L_LoopAgain;
-
-L_SetWand:
- set @Wand, $@WandsPwr[@wand_loop];
- set @WandID, $@WandsAnim[@wand_loop];
- if (QL_MORGAN == 2)
- goto L_SetCastOnce;
- goto L_Return;
-
-L_LoopAgain:
- set @wand_loop, (@wand_loop + 1);
- if (@wand_loop >= getarraysize($@Wands))
- goto L_Return;
- goto L_Loop;
-
-L_SetCastOnce:
- set QL_MORGAN, 3;
- goto L_Return;
-
-L_Return:
- return;
-}
diff --git a/world/map/npc/magic/README.md b/world/map/npc/magic/README.md
new file mode 100644
index 00000000..57ab5131
--- /dev/null
+++ b/world/map/npc/magic/README.md
@@ -0,0 +1,54 @@
+- [ ] check the new builtins and make sure they work as intended
+ - [ ] `puppet`
+ - [ ] check what happens when making a puppet whose name already exist (maybe it replaces?)
+ - [ ] `destroy`
+ - [ ] `registercmd`
+ - [ ] check what happens when registering a command that was already registered
+ - [ ] `target`
+ - [ ] `get`
+ - [ ] the new `set`
+ - [ ] `min`
+ - [ ] `max`
+ - [ ] `pow`
+ - [ ] `sqrt`
+ - [ ] `cbrt`
+ - [ ] `elttype`
+ - [ ] `eltlvl`
+ - [ ] `injure`
+ - [ ] `elif`
+ - [ ] `else`
+ - [ ] `getnpcid`
+ - [ ] `overrideattack`
+ - [ ] `summon`
+ - [ ] `addnpctimer`
+ - [ ] `explode`
+ - [ ] `foreach`
+ - [ ] modified `areatimer`
+ - [ ] `aggravate`
+ - [ ] `getdir`
+ - [ ] `distance`
+ - [ ] `if_then_else`
+
+ - I do not like `void`, feels like an ugly workaround; we should make `puppet` and `call` work in both function context and statement context
+
+---
+- [ ] test the spells
+ - [ ] test with no target
+ - [ ] test with a npc target
+ - [ ] random npc not part of any quest
+ - [ ] injured mouboo
+ - [ ] also test on a **player** with the name `Mouboo` or `mouboo`
+ - [ ] druid tree
+ - [ ] test with a mob target
+ - [ ] mob with clear path (walkable)
+ - [ ] mob with no clear path (unwalkable, blocked by collision)
+ - [ ] mob out of attack range
+ - [ ] test with a player target
+ - [ ] both the caster and the target have pvp disabled
+ - [ ] both the caster and the target have pvp enabled
+ - [ ] the caster has pvp enabled and the target has pvp disabled
+ - [ ] the caster has pvp disabled and the target has pvp enabled
+ - [ ] test with the spouse as target
+
+---
+- [ ] Once everything is done, remove this file
diff --git a/world/map/npc/magic/_import.txt b/world/map/npc/magic/_import.txt
new file mode 100644
index 00000000..2ef595af
--- /dev/null
+++ b/world/map/npc/magic/_import.txt
@@ -0,0 +1,42 @@
+npc: npc/magic/_procedures.txt
+npc: npc/magic/level0-wand.txt
+npc: npc/magic/level1-aggravate.txt
+npc: npc/magic/level1-experience.txt
+npc: npc/magic/level1-lesser-heal.txt
+npc: npc/magic/level1-transmute-wood.txt
+npc: npc/magic/level1-make-sulphur.txt
+npc: npc/magic/level1-flare-dart.txt
+npc: npc/magic/level1-magic-blade.txt
+npc: npc/magic/level1-grow-mauve.txt
+npc: npc/magic/level1-grow-alizarin.txt
+npc: npc/magic/level1-grow-gamboge.txt
+npc: npc/magic/level1-grow-cobalt.txt
+npc: npc/magic/level1-summon-maggots.txt
+npc: npc/magic/level1-sense-spouse.txt
+npc: npc/magic/level1-detect-magic.txt
+npc: npc/magic/level2-arrow-hail.txt
+npc: npc/magic/level2-make-arrows.txt
+npc: npc/magic/level2-make-iron-powder.txt
+npc: npc/magic/level2-magic-knuckles.txt
+npc: npc/magic/level2-summon-snakes.txt
+npc: npc/magic/level2-summon-wickedmushroom.txt
+npc: npc/magic/level2-summon-spiky-mushroom.txt
+npc: npc/magic/level2-summon-fluffies.txt
+npc: npc/magic/level2-summon-mouboo.txt
+npc: npc/magic/level2-summon-pinkie.txt
+npc: npc/magic/level2-toxic-dart.txt
+npc: npc/magic/level2-enchant-lifestone.txt
+npc: npc/magic/level2-flying-backpack.txt
+npc: npc/magic/level2-protect.txt
+npc: npc/magic/level2-barrier.txt
+npc: npc/magic/level2-hide.txt
+npc: npc/magic/level2-happy-curse.txt
+npc: npc/magic/level2-detect-players.txt
+npc: npc/magic/level2-shear.txt
+npc: npc/magic/level2-lightning-strike.txt
+npc: npc/magic/level2-rain.txt
+npc: npc/magic/level2-lay-on-hands.txt
+npc: npc/magic/level2-make-short-tanktop.txt
+npc: npc/magic/level2-make-tanktop.txt
+npc: npc/magic/level2-make-shirt.txt
+npc: npc/magic/level3-necromancy.txt
diff --git a/world/map/npc/magic/_procedures.txt b/world/map/npc/magic/_procedures.txt
new file mode 100644
index 00000000..466d8ca8
--- /dev/null
+++ b/world/map/npc/magic/_procedures.txt
@@ -0,0 +1,162 @@
+function|script|magic_register
+{
+ //debugmes ">> Register " + .invocation$ + " @ " + strnpcinfo(0);
+ set .@ext$, if_then_else(getarg(0,"") != "", "::"+getarg(0), "");
+ registercmd .invocation$, strnpcinfo(0) + .@ext$; // register the spell
+ set .index, $@magic_index;
+ set $@magic_index, $@magic_index + 1;
+ return;
+}
+
+// this can only be done with a npc so...
+-|script|Magic Timer|32767
+{
+ end;
+OnClear:
+ set @_M_BLOCK, 0;
+ end;
+}
+
+// this function is call()-only
+function|script|magic_checks
+{
+ set .@r, 0;
+ if(getpvpflag(1)) set .@r, 1; // FIXME: make HIDDEN into a param
+ if(@_M_BLOCK) set .@r, 2; // check if last debuff ended
+ if(Hp < 1) set .@r, 3; // can not cast when dead
+ return .@r;
+}
+
+function|script|elt_damage
+{
+ // args are damage, dmgplus(mutation), bonus_elt, malus_elt, effect
+ set .@dmg, getarg(0) + rand(getarg(1));
+ if(get(ELTTYPE, @target_id) == getarg(3)) // malus
+ set .@dmg, .@dmg / 3;
+ if(get(ELTTYPE, @target_id) == getarg(2)) // bonus
+ set .@dmg, ((get(ELTLVL, @target_id) + 4) * .@dmg) / 4;
+ set .@source, .caster;
+ if (!.@source) set .@source, getcharid(3);
+
+ injure .@source, @target_id, .@dmg;
+ misceffect getarg(4), @target_id;
+ return;
+}
+
+function|script|melee_damage
+{
+ // args are spell power, target id, dmg
+ if ((getarg(0) - rand(100)) < (get(BaseLevel, getarg(1)) + get(MDEF1, getarg(1))))
+ injure BL_ID, getarg(1), 0;
+ else injure BL_ID, getarg(1), getarg(2);
+ return;
+}
+
+function|script|magic_create_item
+{
+ // FIXME / XXX: IMO, using Luk for this is very bad and unfair
+ set .@exp, (MAGIC_EXPERIENCE & (BYTE_0_MASK | BYTE_1_MASK)) >> BYTE_0_SHIFT;
+ set .@score, (.@exp + rand(min(@spellpower, ((.@exp / 3) + 1))));
+ set @create_params[2], 1; // success flag
+ if (.@score >= @create_params[1]) goto L_Perfect;
+ set @create_params[2], 0; // success flag
+ set .@score, .@score + rand(Luk) + rand(Luk);
+ if (.@score < (@create_params[1] / 3)) goto L_Backfire;
+ if (.@score < ((@create_params[1] * 2) / 3)) goto L_Iten;
+ message strcharinfo(0), "Magic : ##3##BYour spell takes on a mind of its own!";
+ if (rand(3) == 1) getitem @create_items$[1], 1; // bad item
+ return;
+
+L_Iten:
+ if (rand(5) != 2) goto L_Escape;
+ message strcharinfo(0), "Magic : ##3##BYour spell solidifies into the shape of a mysterious object!";
+ getitem "Iten", 1;
+ return;
+
+L_Escape:
+ message strcharinfo(0), "Magic : ##3##BYour spell escapes!";
+ return;
+
+L_Backfire:
+ message strcharinfo(0), "Magic : ##3##BYour spell backfires!";
+ if (rand(110) < Luk) heal 0 - ((BaseLevel+1)*(BaseLevel+2)*(rand(28)+3)), 0;
+ else heal 0 - (BaseLevel + 1), 0;
+ return;
+
+L_Perfect:
+ getitem @create_items$[0], @create_params[0]; // good item
+ return;
+}
+
+function|script|magic_exp
+{
+ set @last_index, (MAGIC_EXPERIENCE & BYTE_2_MASK) >> BYTE_2_SHIFT;
+ set @last_exp, (MAGIC_EXPERIENCE & (BYTE_0_MASK | BYTE_1_MASK)) >> BYTE_0_SHIFT;
+
+ //debugmes "old spell index: " + @last_index;
+ //debugmes "new spell index: " + .index;
+
+ if(getskilllv(SKILL_MAGIC) < (.level + 3) && .index != @last_index)
+ goto L_Gain;
+ //debugmes "same as last spell => don't proceed";
+ goto L_Return;
+
+L_Gain:
+ if(.exp_gain < 1) goto L_Return; // only the spells that have exp register here. If you
+ // remove this line then players can cast a spell with
+ // no cost, then a spell with a reagents, then another
+ // spell with no costs and still get the exp
+ set @new_exp, @last_exp + .exp_gain;
+ if(@new_exp > (BYTE_0_MASK | BYTE_1_MASK)) set @new_exp, (BYTE_0_MASK | BYTE_1_MASK);
+ //debugmes "old magic exp: "+ @last_exp;
+ //debugmes "new magic exp: "+ @new_exp;
+ set MAGIC_EXPERIENCE, (MAGIC_EXPERIENCE &~ (BYTE_0_MASK | BYTE_1_MASK)) | (@new_exp << BYTE_0_SHIFT);
+ set MAGIC_EXPERIENCE, (MAGIC_EXPERIENCE &~ BYTE_2_MASK) | (.index << BYTE_2_SHIFT);
+ goto L_Return;
+
+L_Return:
+ return;
+}
+
+function|script|adjust_spellpower
+{
+ set @spellpower, MATK1 + getskilllv(SKILL_MAGIC) + getskilllv(.school) + 10;
+ if((.school != SKILL_MAGIC_NATURE) && (.school != SKILL_MAGIC_LIFE)) goto L_Return;
+ if(@args$ == "" || !@args$ || getpartnerid2() == 0) goto L_Return;
+ if(getcharid(3, @args$) < 1 || getpartnerid2() != getcharid(3, @args$) || !(isloggedin(getcharid(3, @args$))))
+ goto L_Return;
+ //debugmes "You targeted your spouse!";
+ // XXX: the spell power increases when the target is the spouse so one could
+ // just do #modrilax (spouse) right?
+ //
+ // ... let's just forget about spouse for now
+ goto L_Return;
+
+L_Return:
+ return;
+}
+
+function|script|gain_heal_xp
+{
+ set @last_heal_xp, ((SCRIPT_XP & SCRIPT_HEALSPELL_MASK) >> SCRIPT_HEALSPELL_SHIFT);
+ if ((@target_id != BL_ID) && ((.@heal_value / .heal_xp_value_divisor) > (((10 + @last_heal_xp) + rand(@last_heal_xp + 1)) + rand(@last_heal_xp + 1))))
+ goto L_Block;
+ goto L_Return;
+
+L_Block:
+ set @heal_xp, (@last_heal_xp + @mexp);
+ if (@heal_xp > SCRIPT_HEALSPELL_MASK)
+ set @heal_xp, SCRIPT_HEALSPELL_MASK;
+ set SCRIPT_XP, (SCRIPT_XP & ~(SCRIPT_HEALSPELL_MASK) | (@heal_xp << SCRIPT_HEALSPELL_SHIFT));
+ goto L_Gain_Xp;
+
+L_Gain_Xp:
+ set @heal_exp, .@heal_value;
+ if (.@heal_value > get(HEALXP, @target_id))
+ set @heal_exp, get(HEALXP, @target_id);
+ getexp (.base_exp_factor * @heal_exp), 0;
+ goto L_Return;
+
+L_Return:
+ return;
+}
diff --git a/world/map/npc/magic/level0-wand.txt b/world/map/npc/magic/level0-wand.txt
new file mode 100644
index 00000000..07fbb025
--- /dev/null
+++ b/world/map/npc/magic/level0-wand.txt
@@ -0,0 +1,76 @@
+-|script|spell-wand|32767
+{
+ if(call("magic_checks")) goto L_Failed;
+ callsub S_CheckWand;
+ if(@WandAttack != 1) goto L_Failed;
+
+ // here we install
+ set @_M_BLOCK, 1; // block casting, until the timer clears it
+ addtimer 500, "Magic Timer::OnClear"; // set the new debuff
+ callfunc "adjust_spellpower";
+ misceffect FX_MAGIC_GENERIC, strcharinfo(0);
+ set .@delay, (((200 - Agi) * 1200) / 200);
+ overrideattack (@Wand + (@spellpower / 10)), .@delay, 3, ATTACK_ICON_GENERIC, @WandID, strnpcinfo(0)+"::OnAttack";
+ callfunc "magic_exp";
+ end;
+
+OnAttack:
+ callsub S_CheckWand;
+ if(@WandAttack != 1) goto L_Failed;
+ if(target(BL_ID, @target_id, 22) != 22) goto L_Failed; // 0x02 | 0x04 | 0x10
+ set Sp, (Sp - @WandCost);
+ set @damage, (@Wand * (@spellpower / 3));
+ void call("elt_damage", @damage,@damage,ELT_NEUTRAL,ELT_NEUTRAL,FX_MAGIC_RED);
+ end;
+
+S_CheckWand:
+ set @Wand, 0;
+ set @wand_loop, 0;
+ goto S_Loop;
+
+S_Loop:
+ if ((getequipid(equip_hand1) == .Wands[@wand_loop]) || (getequipid(equip_hand2) == .Wands[@wand_loop]))
+ goto S_SetWand;
+ set @wand_loop, (@wand_loop + 1);
+ if (@wand_loop >= getarraysize(.Wands))
+ goto S_NoWand;
+ goto S_Loop;
+
+S_SetWand:
+ set @Wand, .WandsPwr[@wand_loop];
+ set @WandID, .WandsAnim[@wand_loop];
+ if (QL_MORGAN == 2)
+ set QL_MORGAN, 3;
+ set @WandCost, (@Wand * (BaseLevel / 15) + 2);
+ set @WandAttack, 0;
+ if (Sp < @WandCost)
+ goto S_LowSp;
+ set @WandAttack, 1; // everything is fine
+ return;
+
+S_NoWand:
+ message strcharinfo(0), "Wand : ##3##BYou need a wand Equipped!";
+ set @WandAttack, 0;
+ return;
+
+S_LowSp:
+ message strcharinfo(0), "Wand : ##3##BOut of Mana";
+ set @WandAttack, 0;
+ return;
+
+L_Failed:
+ //misceffect FX_ELECTRICITY_RED, strcharinfo(0); // XXX: do we show an effect on fail?
+ //debugmes "cast or attack failed";
+ end;
+
+OnInit:
+ setarray .Wands[0], 0, 758, 1171;
+ setarray .WandsPwr[0], 0, 2, 1;
+ setarray .WandsAnim[0], 0, 35, 33;
+ set .school, SKILL_MAGIC;
+ set .invocation$, chr(MAGIC_SYMBOL) + "confringo"; // used in npcs that refer to this spell
+ void call("magic_register");
+ set .level, 0;
+ set .exp_gain, 1;
+ end;
+}
diff --git a/world/map/npc/magic/level1-aggravate.txt b/world/map/npc/magic/level1-aggravate.txt
new file mode 100644
index 00000000..05474a2a
--- /dev/null
+++ b/world/map/npc/magic/level1-aggravate.txt
@@ -0,0 +1,23 @@
+-|script|spell-aggravate|32767
+{
+ if(call("magic_checks")) end;
+ if (Sp < 3) end;
+ if (getskilllv(SKILL_MAGIC) < .level) end;
+ set @_M_BLOCK, 1; // block casting, until the timer clears it
+ addtimer 1000, "Magic Timer::OnClear"; // set the new debuff
+ set @args$, ""; callfunc "adjust_spellpower"; // we reset @args$ because this spell should not have a target
+ set @distance, (2 + (@spellpower / 50));
+ set Sp, Sp - 3;
+ misceffect FX_MAGIC_GREEN, strcharinfo(0);
+ callfunc "magic_exp";
+ aggravate getmap(), (POS_X - @distance), (POS_Y - @distance), (POS_X + @distance), (POS_Y + @distance), SFX_DEFAULT;
+ end;
+
+OnInit:
+ set .school, SKILL_MAGIC_NATURE;
+ set .invocation$, chr(MAGIC_SYMBOL) + "itenplz"; // used in npcs that refer to this spell
+ void call("magic_register");
+ set .level, 1;
+ set .exp_gain, 0;
+ end;
+}
diff --git a/world/map/npc/magic/level1-detect-magic.txt b/world/map/npc/magic/level1-detect-magic.txt
new file mode 100644
index 00000000..f0c01592
--- /dev/null
+++ b/world/map/npc/magic/level1-detect-magic.txt
@@ -0,0 +1,30 @@
+-|script|detect-magic|32767
+{
+ if(call("magic_checks")) end;
+ if (Sp < 3) end;
+ if (getskilllv(SKILL_MAGIC) < .level) end;
+ set @_M_BLOCK, 1; // block casting, until the timer clears it
+ addtimer 6000, "Magic Timer::OnClear"; // set the new debuff
+ callfunc "adjust_spellpower";
+ set Sp, Sp - 3;
+ misceffect FX_MAGIC_GENERIC, strcharinfo(0);
+ set .@range, (@spellpower/50)+1;
+ foreach 1, getmap(), POS_X - .@range, POS_Y - .@range, POS_X + .@range, POS_Y + .@range,
+ strnpcinfo(0) + "::OnNearbyNpc";
+ callfunc "magic_exp";
+ end;
+
+OnNearbyNpc:
+ set .@e$, strnpcinfo(2,@target_id);
+ if(.@e$ == "#_M" || .@e$ == "#MAGIC" || get(.IS_MAGIC, @target_id))
+ misceffect FX_MAGIC_DEFAULT, @target_id;
+ end;
+
+OnInit:
+ set .school, SKILL_MAGIC;
+ set .invocation$, chr(MAGIC_SYMBOL) + "miteyo"; // used in npcs that refer to this spell
+ void call("magic_register");
+ set .level, 1;
+ set .exp_gain, 0;
+ end;
+}
diff --git a/world/map/npc/magic/level1-experience.txt b/world/map/npc/magic/level1-experience.txt
new file mode 100644
index 00000000..36ad8179
--- /dev/null
+++ b/world/map/npc/magic/level1-experience.txt
@@ -0,0 +1,41 @@
+-|script|spell-experience|32767
+{
+ if(call("magic_checks")) end;
+ if (Sp < 1) end;
+ set @_M_BLOCK, 1; // block casting, until the timer clears it
+ addtimer 1000, "Magic Timer::OnClear"; // set the new debuff
+ set @level, getskilllv(.school);
+ if (@level < .level) end;
+ callfunc "adjust_spellpower";
+ set Sp, Sp - 1;
+ misceffect FX_MAGIC_GENERIC, strcharinfo(0);
+ callfunc "magic_exp";
+ set @ratio, ((@last_exp*10) - rand(.MAX_MAGIC_EXP[@level]/30))/.MAX_MAGIC_EXP[@level];
+
+ set @mes$, "You feel completely overwhelmed by your magic.";
+ if(@ratio == 1) set @mes$, "You feel quite overwhelmed by your magic, but are beginning to see patterns.";
+ if(@ratio == 2) set @mes$, "You feel that you have only the bare minimum of control over your magic.";
+ if(@ratio == 3) set @mes$, "Trying to control your magic is still rather troublesome.";
+ if(@ratio == 4) set @mes$, "You feel you still have a few difficulties in controlling your magic.";
+ if(@ratio == 5) set @mes$, "You feel somewhat in control of your magic.";
+ if(@ratio == 6) set @mes$, "You feel mostly in control of your magic.";
+ if(@ratio == 7) set @mes$, "You feel quite in control of your magic.";
+ if(@ratio == 8) set @mes$, "You feel that you have very good control of your magic.";
+ if(@ratio == 9) set @mes$, "You feel in almost perfect control of your magic.";
+ if(@ratio >= 10) set @mes$, "You feel in perfect control of your magic" + if_then_else(@level >= MAX_MAGIC_LEVEL, ".", ", and seem on the verge of something more... perhaps you should see the Mana Seed to ask for more magic?");
+ if(@ratio >= 20) set @mes$, "You have perfect control of what you understand now, but there is now a distinct sensation of something more, something indescribable. If only the Mana Seed would give more magic to you...";
+ if(@ratio >= 45) set @mes$, "Magic flows naturally from you, readily and with ease. Your understanding of what you can currently control at present is flawless, far beyond your requirements to cast magic at this level.";
+ if(@ratio >= 45 && @level < MAX_MAGIC_LEVEL) set @mes$, @mes$ + " Surely the Mana Seed will more than readily offer more magic for such a proficient user.";
+ if(@level >= 5) set @mes$, "You are as proficient at magic as you can possibly be."; // this is the maximum magic level
+ message strcharinfo(0), "Magic : ##3##B"+@mes$;
+ end;
+
+OnInit:
+ set .school, SKILL_MAGIC;
+ set .invocation$, chr(MAGIC_SYMBOL) + "abizit"; // used in npcs that refer to this spell
+ set .level, 1;
+ set .exp_gain, 0;
+ void call("magic_register");
+ setarray .MAX_MAGIC_EXP[0], 0, 0, 100, 1200, 8000, 40000, 65535;
+ end;
+}
diff --git a/world/map/npc/magic/level1-flare-dart.txt b/world/map/npc/magic/level1-flare-dart.txt
new file mode 100644
index 00000000..6c0ef303
--- /dev/null
+++ b/world/map/npc/magic/level1-flare-dart.txt
@@ -0,0 +1,45 @@
+-|script|flare-dart|32767
+{
+ if(call("magic_checks")) end;
+ if (Sp < 10) end;
+ set @level, getskilllv(.school);
+ if (getskilllv(SKILL_MAGIC) < .level) end;
+ if (@level <= 2 && countitem("SulphurPowder") >= 1) delitem "SulphurPowder", 1;
+ elif (@level <= 2) end;
+ set @_M_BLOCK, 1; // block casting, until the timer clears it
+ addtimer 500, "Magic Timer::OnClear"; // set the new debuff
+ callfunc "adjust_spellpower";
+ set Sp, Sp - 10;
+ misceffect FX_MAGIC_BLACK, strcharinfo(0);
+ setarray @flarspell[0],
+ sqrt(@spellpower) * 5, //dmg
+ (BaseLevel/3) + 5, // dmg bonus
+ (@spellpower/50) + 3, // charges
+ (((200 - Agi) * 1200) / 200); // delay
+ callfunc "magic_exp";
+ goto L_FreeRecast;
+
+OnAttack:
+ if (target(BL_ID, @target_id, 50) != 50) goto L_FreeRecast; // 0x20 | 0x02 | 0x10
+ misceffect FX_MAGIC_BLACK, strcharinfo(0);
+ void call("elt_damage", @flarspell[0], @flarspell[1], ELT_WATER, ELT_FIRE, FX_MAGIC_BLACK);
+ set @flarspell[2], @flarspell[2] - 1;
+ goto L_FreeRecast;
+
+L_FreeRecast:
+ if (@flarspell[2] > 0)
+ addtimer 0, strnpcinfo(0) + "::OnSetRecast";
+ end;
+
+OnSetRecast:
+ overrideattack 1, @flarspell[3], 4, ATTACK_ICON_GENERIC, 34, strnpcinfo(0)+"::OnAttack";
+ end;
+
+OnInit:
+ set .school, SKILL_MAGIC_WAR;
+ set .invocation$, chr(MAGIC_SYMBOL) + "flar"; // used in npcs that refer to this spell
+ void call("magic_register");
+ set .level, 1;
+ set .exp_gain, 1;
+ end;
+}
diff --git a/world/map/npc/magic/level1-grow-alizarin.txt b/world/map/npc/magic/level1-grow-alizarin.txt
new file mode 100644
index 00000000..601f32c2
--- /dev/null
+++ b/world/map/npc/magic/level1-grow-alizarin.txt
@@ -0,0 +1,38 @@
+-|script|grow-alizarin|32767
+{
+ if(call("magic_checks")) end;
+ if (Sp < 4) end;
+ if (getskilllv(SKILL_MAGIC) < .level) end;
+ if (countitem("AlizarinHerb") < 1 || countitem("Root") < 1) end;
+ delitem "AlizarinHerb", 1;
+ delitem "Root", 1;
+ set @_M_BLOCK, 1; // block casting, until the timer clears it
+ addtimer 2000, "Magic Timer::OnClear"; // set the new debuff
+ callfunc "adjust_spellpower";
+ set Sp, Sp - 4;
+ misceffect FX_MAGIC_GREEN, strcharinfo(0);
+ misceffect FX_PENTAGRAM_BUILDUP, strcharinfo(0);
+ setarray @summon[0], 0, (getskilllv(.school)/2)+1;
+ callfunc "magic_exp";
+ addtimer 4000-(@spellpower-9), strnpcinfo(0)+"::OnSummon";
+ end;
+
+OnSummon:
+ misceffect FX_PENTAGRAM_BURST, strcharinfo(0);
+ callsub S_SummonAll;
+ end;
+
+S_SummonAll:
+ summon getmap(), rand(POS_X-2,POS_X+2), rand(POS_Y-2,POS_Y+2), BL_ID, 1032, 1, (@spellpower*50)+10000;
+ set @summon[0], @summon[0] + 1;
+ if (@summon[0] < @summon[1]) goto S_SummonAll;
+ return;
+
+OnInit:
+ set .school, SKILL_MAGIC_NATURE;
+ set .invocation$, chr(MAGIC_SYMBOL) + "modriphoo"; // used in npcs that refer to this spell
+ void call("magic_register");
+ set .level, 1;
+ set .exp_gain, 1;
+ end;
+}
diff --git a/world/map/npc/magic/level1-grow-cobalt.txt b/world/map/npc/magic/level1-grow-cobalt.txt
new file mode 100644
index 00000000..78ab602a
--- /dev/null
+++ b/world/map/npc/magic/level1-grow-cobalt.txt
@@ -0,0 +1,38 @@
+-|script|grow-cobalt|32767
+{
+ if(call("magic_checks")) end;
+ if (Sp < 4) end;
+ if (getskilllv(SKILL_MAGIC) < .level) end;
+ if (countitem("CobaltHerb") < 1 || countitem("Root") < 1) end;
+ delitem "CobaltHerb", 1;
+ delitem "Root", 1;
+ set @_M_BLOCK, 1; // block casting, until the timer clears it
+ addtimer 2000, "Magic Timer::OnClear"; // set the new debuff
+ callfunc "adjust_spellpower";
+ set Sp, Sp - 4;
+ misceffect FX_MAGIC_GREEN, strcharinfo(0);
+ misceffect FX_PENTAGRAM_BUILDUP, strcharinfo(0);
+ setarray @summon[0], 0, (getskilllv(.school)/2)+1;
+ callfunc "magic_exp";
+ addtimer 4000-(@spellpower-9), strnpcinfo(0)+"::OnSummon";
+ end;
+
+OnSummon:
+ misceffect FX_PENTAGRAM_BURST, strcharinfo(0);
+ callsub S_SummonAll;
+ end;
+
+S_SummonAll:
+ summon getmap(), rand(POS_X-2,POS_X+2), rand(POS_Y-2,POS_Y+2), BL_ID, 1030, 1, (@spellpower*50)+10000;
+ set @summon[0], @summon[0] + 1;
+ if (@summon[0] < @summon[1]) goto S_SummonAll;
+ return;
+
+OnInit:
+ set .school, SKILL_MAGIC_NATURE;
+ set .invocation$, chr(MAGIC_SYMBOL) + "modrisump"; // used in npcs that refer to this spell
+ void call("magic_register");
+ set .level, 1;
+ set .exp_gain, 1;
+ end;
+}
diff --git a/world/map/npc/magic/level1-grow-gamboge.txt b/world/map/npc/magic/level1-grow-gamboge.txt
new file mode 100644
index 00000000..eda23f70
--- /dev/null
+++ b/world/map/npc/magic/level1-grow-gamboge.txt
@@ -0,0 +1,38 @@
+-|script|grow-gamboge|32767
+{
+ if(call("magic_checks")) end;
+ if (Sp < 4) end;
+ if (getskilllv(SKILL_MAGIC) < .level) end;
+ if (countitem("GambogeHerb") < 1 || countitem("Root") < 1) end;
+ delitem "GambogeHerb", 1;
+ delitem "Root", 1;
+ set @_M_BLOCK, 1; // block casting, until the timer clears it
+ addtimer 2000, "Magic Timer::OnClear"; // set the new debuff
+ callfunc "adjust_spellpower";
+ set Sp, Sp - 4;
+ misceffect FX_MAGIC_GREEN, strcharinfo(0);
+ misceffect FX_PENTAGRAM_BUILDUP, strcharinfo(0);
+ setarray @summon[0], 0, (getskilllv(.school)/2)+1;
+ callfunc "magic_exp";
+ addtimer 4000-(@spellpower-9), strnpcinfo(0)+"::OnSummon";
+ end;
+
+OnSummon:
+ misceffect FX_PENTAGRAM_BURST, strcharinfo(0);
+ callsub S_SummonAll;
+ end;
+
+S_SummonAll:
+ summon getmap(), rand(POS_X-2,POS_X+2), rand(POS_Y-2,POS_Y+2), BL_ID, 1031, 1, (@spellpower*50)+10000;
+ set @summon[0], @summon[0] + 1;
+ if (@summon[0] < @summon[1]) goto S_SummonAll;
+ return;
+
+OnInit:
+ set .school, SKILL_MAGIC_NATURE;
+ set .invocation$, chr(MAGIC_SYMBOL) + "modriyikam"; // used in npcs that refer to this spell
+ void call("magic_register");
+ set .level, 1;
+ set .exp_gain, 1;
+ end;
+}
diff --git a/world/map/npc/magic/level1-grow-mauve.txt b/world/map/npc/magic/level1-grow-mauve.txt
new file mode 100644
index 00000000..951b71f0
--- /dev/null
+++ b/world/map/npc/magic/level1-grow-mauve.txt
@@ -0,0 +1,38 @@
+-|script|grow-mauve|32767
+{
+ if(call("magic_checks")) end;
+ if (Sp < 4) end;
+ if (getskilllv(SKILL_MAGIC) < .level) end;
+ if (countitem("MauveHerb") < 1 || countitem("Root") < 1) end;
+ delitem "MauveHerb", 1;
+ delitem "Root", 1;
+ set @_M_BLOCK, 1; // block casting, until the timer clears it
+ addtimer 2000, "Magic Timer::OnClear"; // set the new debuff
+ callfunc "adjust_spellpower";
+ set Sp, Sp - 4;
+ misceffect FX_MAGIC_GREEN, strcharinfo(0);
+ misceffect FX_PENTAGRAM_BUILDUP, strcharinfo(0);
+ setarray @summon[0], 0, (getskilllv(.school)/2)+1;
+ callfunc "magic_exp";
+ addtimer 4000-(@spellpower-9), strnpcinfo(0)+"::OnSummon";
+ end;
+
+OnSummon:
+ misceffect FX_PENTAGRAM_BURST, strcharinfo(0);
+ callsub S_SummonAll;
+ end;
+
+S_SummonAll:
+ summon getmap(), rand(POS_X-2,POS_X+2), rand(POS_Y-2,POS_Y+2), BL_ID, 1029, 1, (@spellpower*50)+10000;
+ set @summon[0], @summon[0] + 1;
+ if (@summon[0] < @summon[1]) goto S_SummonAll;
+ return;
+
+OnInit:
+ set .school, SKILL_MAGIC_NATURE;
+ set .invocation$, chr(MAGIC_SYMBOL) + "modrilax"; // used in npcs that refer to this spell
+ void call("magic_register");
+ set .level, 1;
+ set .exp_gain, 1;
+ end;
+}
diff --git a/world/map/npc/magic/level1-lesser-heal.txt b/world/map/npc/magic/level1-lesser-heal.txt
new file mode 100644
index 00000000..fcd9897a
--- /dev/null
+++ b/world/map/npc/magic/level1-lesser-heal.txt
@@ -0,0 +1,51 @@
+-|script|lesser-heal|32767
+{
+ if(call("magic_checks")) end;
+ if (Sp < 6) end;
+ if (getskilllv(SKILL_MAGIC) < .level) end;
+ set @target_id, getcharid(3, @args$);
+ if (@target_id < 1 || !(isloggedin(@target_id))) set @target_id, BL_ID; // fallback to self
+ if (@args$ == "Mouboo" || @args$ == "mouboo") set @target_id, getnpcid("Mouboo");
+ set .@range, (((MATK1 + getskilllv(SKILL_MAGIC) + getskilllv(.school) + 10) / 100) + 2);
+ if (distance(BL_ID, @target_id) >= .@range) end;
+ if (PVP_CHANNEL != get(PVP_CHANNEL, @target_id) && get(PVP_CHANNEL, @target_id) != 0) end;
+ if (countitem("Lifestone") < 1) end;
+ set @_M_BLOCK, 1; // block casting, until the timer clears it
+ addtimer 500, "Magic Timer::OnClear"; // set the new debuff
+ delitem "Lifestone", 1;
+ callfunc "adjust_spellpower";
+ set Sp, Sp - 6;
+ misceffect FX_MAGIC_WHITE, strcharinfo(0);
+ set .@heal_value, get(HEALXP, @target_id);
+ set @mexp, .exp_gain;
+ callfunc "magic_exp";
+ if (.@heal_value > 200)
+ set .@heal_value, 200;
+ if (@args$ == "Mouboo" || @args$ == "mouboo") goto L_Mouboo;
+ if (@target_id != BL_ID) goto L_NotMe;
+ goto L_Continue;
+
+L_NotMe:
+ misceffect FX_MAGIC_WHITE, @target_id;
+ callfunc "gain_heal_xp";
+ goto L_Continue;
+
+L_Continue:
+ if (getskilllv(SKILL_MAGIC_DARK) >= 1) sc_start SC_HALT_REGENERATE, 2000, 0;
+ if (attachrid(@target_id) != 1) end; // XXX: to avoid the ugly attachrid method we would need some kind of `run_as` builtin
+ if (!(isdead())) heal 200, 0, 1;
+ end;
+
+L_Mouboo:
+ mes "Mouboo : ##3##BYour spell seems to have no effect on the mouboo.";
+ close;
+
+OnInit:
+ set .school, SKILL_MAGIC_LIFE;
+ set .invocation$, chr(MAGIC_SYMBOL) + "lum"; // used in npcs that refer to this spell
+ void call("magic_register");
+ set .level, 1;
+ set .exp_gain, 1;
+ set .heal_xp_value_divisor, 2;
+ end;
+}
diff --git a/world/map/npc/magic/level1-magic-blade.txt b/world/map/npc/magic/level1-magic-blade.txt
new file mode 100644
index 00000000..ad39c244
--- /dev/null
+++ b/world/map/npc/magic/level1-magic-blade.txt
@@ -0,0 +1,48 @@
+-|script|magic-blade|32767
+{
+ if(call("magic_checks")) end;
+ if (Sp < 9) end;
+ set .@level, getskilllv(.school);
+ if (getskilllv(SKILL_MAGIC) < .level) end;
+ if (.@level <= 2 && countitem("SharpKnife") >= 1) set .@component$, "SharpKnife";
+ elif (.@level <= 2 && countitem("Knife") >= 1) set .@component$, "Knife";
+ elif (.@level <= 2) end;
+ if (.@component$ != "") delitem .@component$, 1;
+ set @_M_BLOCK, 1; // block casting, until the timer clears it
+ addtimer 500, "Magic Timer::OnClear"; // set the new debuff
+ callfunc "adjust_spellpower";
+ set Sp, Sp - 9;
+ misceffect FX_MAGIC_BLACK, strcharinfo(0);
+ setarray @chizaspell[0],
+ if_then_else(.@component$ == "Knife", 40, 60), // dmg
+ Str, // do not allow to equip light armor, cast, and then switch to heavy armor to get bonus str
+ (@spellpower/15) + 10, // charges
+ (((200 - Agi) * 1200) / 200), // delay
+ @spellpower;
+
+ callfunc "magic_exp";
+ goto L_FreeRecast;
+
+OnAttack:
+ if (target(BL_ID, @target_id, 22) != 22) goto L_FreeRecast; // 0x10 | 0x02 | 0x04
+ void call("melee_damage", @chizaspell[4], @target_id, (@chizaspell[0] + rand(@chizaspell[1] + 5)));
+ set @chizaspell[2], @chizaspell[2] - 1;
+ goto L_FreeRecast;
+
+L_FreeRecast:
+ if (@chizaspell[2] > 0)
+ addtimer 0, strnpcinfo(0) + "::OnSetRecast";
+ end;
+
+OnSetRecast:
+ overrideattack 1, @chizaspell[3], 1, ATTACK_ICON_GENERIC, 30, strnpcinfo(0)+"::OnAttack";
+ end;
+
+OnInit:
+ set .school, SKILL_MAGIC_WAR;
+ set .invocation$, chr(MAGIC_SYMBOL) + "chiza"; // used in npcs that refer to this spell
+ void call("magic_register");
+ set .level, 1;
+ set .exp_gain, 1;
+ end;
+}
diff --git a/world/map/npc/magic/level1-make-sulphur.txt b/world/map/npc/magic/level1-make-sulphur.txt
new file mode 100644
index 00000000..4aab7e3b
--- /dev/null
+++ b/world/map/npc/magic/level1-make-sulphur.txt
@@ -0,0 +1,25 @@
+-|script|make-sulphur|32767
+{
+ if(call("magic_checks")) end;
+ if (Sp < 4) end;
+ if (getskilllv(SKILL_MAGIC) < .level) end;
+ if (countitem("PileOfAsh") >= 1) delitem "PileOfAsh", 1; else end;
+ set @_M_BLOCK, 1; // block casting, until the timer clears it
+ addtimer 4000, "Magic Timer::OnClear"; // set the new debuff
+ callfunc "adjust_spellpower";
+ set Sp, Sp - 4;
+ misceffect FX_MAGIC_RED, strcharinfo(0);
+ setarray @create_params[0], (@spellpower/100)+1+(rand(max(1,(800-@spellpower)))/180), 50;
+ setarray @create_items$[0], "SulphurPowder", "PileOfAsh";
+ callfunc "magic_create_item";
+ callfunc "magic_exp";
+ end;
+
+OnInit:
+ set .school, SKILL_MAGIC_TRANSMUTE;
+ set .invocation$, chr(MAGIC_SYMBOL) + "gole"; // used in npcs that refer to this spell
+ void call("magic_register");
+ set .level, 1;
+ set .exp_gain, 1;
+ end;
+}
diff --git a/world/map/npc/magic/level1-sense-spouse.txt b/world/map/npc/magic/level1-sense-spouse.txt
new file mode 100644
index 00000000..1766276c
--- /dev/null
+++ b/world/map/npc/magic/level1-sense-spouse.txt
@@ -0,0 +1,25 @@
+-|script|sense-spouse|32767
+{
+ set .@m, getpartnerid2();
+ if (.@m < 1)
+ goto L_NotMarried;
+ if (isloggedin(.@m) < 1)
+ goto L_NotOnline;
+ if (sc_check(SC_HIDE, .@m) || getpvpflag(1, .@m))
+ goto L_NotOnline;
+ message strcharinfo(0), "Spouse : Your spouse is... somewhere.";
+ end;
+
+L_NotOnline:
+ message strcharinfo(0), "Spouse : Your spouse is not online, or maybe just hiding from you.";
+ end;
+
+L_NotMarried:
+ message strcharinfo(0), "Spouse : You are not married, or no longer married (sorry for being the one telling you the bad news).";
+ end;
+
+OnInit:
+ set .invocation$, chr(MAGIC_SYMBOL) + "inzuwilt"; // used in npcs that refer to this spell
+ registercmd .invocation$, strnpcinfo(0);
+ end;
+}
diff --git a/world/map/npc/magic/level1-summon-maggots.txt b/world/map/npc/magic/level1-summon-maggots.txt
new file mode 100644
index 00000000..aa4e646f
--- /dev/null
+++ b/world/map/npc/magic/level1-summon-maggots.txt
@@ -0,0 +1,53 @@
+-|script|summon-maggots|32767
+{
+ end;
+
+OnCast:
+ if(call("magic_checks")) end;
+ if (Sp < 21) end;
+ if (getskilllv(SKILL_MAGIC) < .level) end;
+ if (countitem("MaggotSlime") < 1 || countitem("Root") < 1) end;
+ delitem "MaggotSlime", 1;
+ delitem "Root", 1;
+ set @_M_BLOCK, 1; // block casting, until the timer clears it
+ addtimer 20000, "Magic Timer::OnClear"; // set the new debuff
+ callfunc "adjust_spellpower";
+ set Sp, Sp - 21;
+ misceffect FX_MAGIC_BLUE, strcharinfo(0);
+ misceffect FX_PENTAGRAM_BUILDUP, strcharinfo(0);
+ callfunc "magic_exp";
+ set .@puppet$, "#"+strnpcinfo(0)+"#"+BL_ID;
+ set .@puppet, puppet(getmap(), POS_X, POS_Y, .@puppet$, 127);
+ set .count, ((sqrt(@spellpower)+(@spellpower/15))/5)+1, .@puppet;
+ set .master, BL_ID, .@puppet;
+ set .lifetime, (@spellpower*50)+10000, .@puppet;
+ addnpctimer 5000-(@spellpower*5), .@puppet$+"::OnSummon";
+ addnpctimer 6000, .@puppet$+"::OnDestroy";
+ end;
+
+OnSummon:
+ specialeffect FX_PENTAGRAM_BURST;
+ set .@i, 0;
+ set .@x, getnpcx();
+ set .@y, getnpcy();
+ set .@map$, strnpcinfo(3);
+ callsub S_SummonAll;
+ end;
+
+OnDestroy:
+ destroy;
+
+S_SummonAll:
+ summon .@map$, rand(.@x-2,.@x+2), rand(.@y-2,.@y+2), .master, 1002, 2, .lifetime;
+ set .@i, .@i + 1;
+ if (.@i < .count) goto S_SummonAll;
+ return;
+
+OnInit:
+ set .school, SKILL_MAGIC_ASTRAL;
+ set .invocation$, chr(MAGIC_SYMBOL) + "kalmurk"; // used in npcs that refer to this spell
+ void call("magic_register", "OnCast");
+ set .level, 1;
+ set .exp_gain, 1;
+ end;
+}
diff --git a/world/map/npc/magic/level1-transmute-wood.txt b/world/map/npc/magic/level1-transmute-wood.txt
new file mode 100644
index 00000000..a7c86ecc
--- /dev/null
+++ b/world/map/npc/magic/level1-transmute-wood.txt
@@ -0,0 +1,37 @@
+-|script|spell-transmute-wood|32767
+{
+ if(call("magic_checks")) end;
+ if (Sp < 5) end;
+ if (getskilllv(SKILL_MAGIC) < .level) end;
+ if (countitem("RawLog") >= 1) delitem "RawLog", 1; else end;
+ set @_M_BLOCK, 1; // block casting, until the timer clears it
+ addtimer 4000, "Magic Timer::OnClear"; // set the new debuff
+ callfunc "adjust_spellpower";
+ set Sp, Sp - 5;
+ misceffect FX_MAGIC_RED, strcharinfo(0);
+ if (@args$ == "boo") goto L_Mouboo;
+ elif (@args$ == "lurk") goto L_Skytlurk;
+ else message strcharinfo(0), "Magic : ##3##BYou do not know how to transmute wood into this kind of animal."; // FIXME: write a better sentence
+ end;
+
+L_Mouboo:
+ setarray @create_params[0], 1, 40;
+ setarray @create_items$[0], "MoubooFigurine", "WarpedLog";
+ callfunc "magic_create_item";
+ callfunc "magic_exp";
+ end;
+
+L_Skytlurk:
+ if (rand(2) == 1) getitem "Iten", 1;
+ else getitem "WarpedLog", 1;
+ message strcharinfo(0), "Magic : ##3##BYou have no idea what a Skrytlurk looks like.";
+ end;
+
+OnInit:
+ set .school, SKILL_MAGIC_TRANSMUTE;
+ set .invocation$, chr(MAGIC_SYMBOL) + "parum"; // used in npcs that refer to this spell
+ void call("magic_register");
+ set .level, 1;
+ set .exp_gain, 1;
+ end;
+}
diff --git a/world/map/npc/magic/level2-arrow-hail.txt b/world/map/npc/magic/level2-arrow-hail.txt
new file mode 100644
index 00000000..3be14f1a
--- /dev/null
+++ b/world/map/npc/magic/level2-arrow-hail.txt
@@ -0,0 +1,115 @@
+-|script|arrow-hail|32767
+{
+ // we can not start here because for the puppets this is OnClick
+ end;
+
+OnCast:
+ if(call("magic_checks")) end;
+ if (getskilllv(.school) < .level) end;
+ if (getskilllv(SKILL_MAGIC) < .level) end;
+ if (Sp < 25) end;
+ explode .@map_ext[0], getmap(), "-";
+ if (.@map_ext[1] != 1) end; // XXX this is fugly, in the future let's use MF_OUTSIDE to detect if a map is "outside" or "inside"
+ if (getmapflag(getmap(), MF_TOWN)) end;
+ if (countitem("Arrow") >= 20 && countitem("SulphurPowder") >= 1) delitem "Arrow", 20;
+ elif (countitem("IronArrow") >= 20 && countitem("SulphurPowder") >= 1) delitem "IronArrow", 20;
+ else end;
+ delitem "SulphurPowder", 1;
+ set Sp, Sp - 25;
+ set @_M_BLOCK, 1; // block casting, until the timer clears it
+ addtimer 5000, "Magic Timer::OnClear"; // set the new debuff
+
+ setarray @away[0], POS_X, POS_Y, getdir(), (.range + 1), 0;
+ callsub S_AwayFrom;
+
+ set @nearby, 0;
+ foreach 1, getmap(), @away[0] - 14, @away[1] - 14, @away[0] + 14, @away[1] + 14,
+ strnpcinfo(0) + "::OnNearbyNpc";
+ if (@nearby) goto L_Absorb;
+
+ callfunc "adjust_spellpower";
+ set @new_npc_name$, "#" + strnpcinfo(0) + "#" + getcharid(3); // make a unique puppet name for every player
+ callfunc "magic_exp";
+ misceffect FX_MAGIC_BLACK, strcharinfo(0);
+ set @spell_npc, puppet(getmap(), POS_X, POS_Y, @new_npc_name$, 127); // clone npc => get puppet id
+ set .max_hit, (@spellpower / 8), @spell_npc; // set .max_hit in the puppet
+ set .caster, getcharid(3), @spell_npc; // tell the puppet who controls it
+ set .damage, 125, @spell_npc;
+ set .damage_bonus, (@spellpower / 5), @spell_npc;
+ set .area_x, @away[0], @spell_npc; set .area_y, @away[1], @spell_npc;
+ donpcevent @new_npc_name$+"::OnLaunch"; // start the puppet timer and strike
+ initnpctimer @new_npc_name$; // start the destroy timer
+ end;
+
+S_AwayFrom:
+ if(@away[2] == 6 && !(iscollision(getmap(), (@away[0] + 1), @away[1]))) // right
+ set @away[0], @away[0] + 1;
+ if(@away[2] == 4 && !(iscollision(getmap(), @away[0], (@away[1] - 1)))) // up
+ set @away[1], @away[1] - 1;
+ if(@away[2] == 2 && !(iscollision(getmap(), (@away[0] - 1), @away[1]))) // left
+ set @away[0], @away[0] - 1;
+ if(@away[2] == 0 && !(iscollision(getmap(), @away[0], (@away[1] + 1)))) // down
+ set @away[1], @away[1] + 1;
+ set @away[4], @away[4] + 1;
+ if(@away[4] < @away[3]) goto S_AwayFrom;
+ return;
+
+L_Absorb:
+ message strcharinfo(0), "##3Arrow Hail : ##BA nearby arrow hail absorbs your magic!";
+ end;
+
+OnNearbyNpc:
+ explode .@nearby$[0], strnpcinfo(0,@target_id), "#";
+ if(.@nearby$[0] == "arrow-hail" || .@nearby$[1] == "arrow-hail")
+ set @nearby, @nearby + 1;
+ end;
+
+OnLaunch:
+ if(attachrid(.caster) != 1) destroy; // destroy if caster is missing
+ if(getmap() != strnpcinfo(3)) destroy; // destroy if caster left the map
+ set .hit, .hit + 1;
+ if(.hit > .max_hit) destroy;
+ set .launch, 0;
+ callsub S_Launch;
+ addnpctimer 250 + rand(50) + rand(50), strnpcinfo(0)+"::OnLaunch"; // loop until max
+ end;
+
+S_Launch:
+ npcareawarp .area_x - 6, .area_y - 6, .area_x + 6, .area_y + 6, 0, strnpcinfo(0);
+ misceffect FX_ARROW_HAIL;
+ set .done, 0;
+ foreach 2, strnpcinfo(3), getnpcx(), getnpcy(), getnpcx(), getnpcy(), strnpcinfo(0) + "::OnHit";
+ if (PVP_CHANNEL || getmapflag(getmap(), MF_PVP))
+ foreach 0, strnpcinfo(3), getnpcx(), getnpcy(), getnpcx(), getnpcy(), strnpcinfo(0) + "::OnHit";
+ if(!.done && getx() == getnpcx() && gety() == getnpcy())
+ heal 0 - (.damage + rand(.damage_bonus) + rand(.damage_bonus)), 0; // injure caster
+ set .launch, .launch + 1;
+ if(.launch < 3) goto S_Launch;
+ return;
+
+OnTimer30000:
+ debugmes "frillyar timeout! [this shouldn't happen]";
+ destroy;
+
+OnHit:
+ if(attachrid(.caster) != 1) destroy; // destroy if caster is missing
+ if(getmap() != strnpcinfo(3)) destroy; // destroy if caster left the map
+
+ if(target(.caster, @target_id, 16) != 16 && .caster != @target_id) end;
+ if((get(BL_TYPE, @target_id) & 1) == 0) end; // either mob or pc
+ set .@damage, .damage + rand(.damage_bonus) + rand(.damage_bonus);
+ if(.caster != @target_id)
+ set .@damage, (.@damage * (100 - get(MDEF1, @target_id))) / 100;
+ injure .caster, @target_id, .@damage;
+ set .done, 1;
+ end;
+
+OnInit:
+ set .school, SKILL_MAGIC_WAR;
+ set .range, 7;
+ set .invocation$, chr(MAGIC_SYMBOL) + "frillyar"; // used in npcs that refer to this spell
+ void call("magic_register", "OnCast");
+ set .level, 2;
+ set .exp_gain, 2;
+ end;
+}
diff --git a/world/map/npc/magic/level2-barrier.txt b/world/map/npc/magic/level2-barrier.txt
new file mode 100644
index 00000000..3f78677b
--- /dev/null
+++ b/world/map/npc/magic/level2-barrier.txt
@@ -0,0 +1,50 @@
+-|script|magic barrier|32767
+{
+ if(call("magic_checks")) end;
+ if (Sp < 15) end;
+ set .@level, getskilllv(.school);
+ if (.@level < .level) end;
+ if (getskilllv(SKILL_MAGIC) < .level) end;
+ if (.@level <= 3 && countitem("SmallMushroom") >= 1) delitem "SmallMushroom", 1;
+ elif (.@level <= 3) end;
+ set @target_id, getcharid(3, @args$);
+ if (@target_id < 1 || !(isloggedin(@target_id))) set @target_id, BL_ID; // fallback to self
+
+ set @asorm_caster, BL_ID, @target_id;
+ if (attachrid(@target_id) != 1) end;
+ set @target_hat, getequipid(equip_head), @asorm_caster;
+ if (attachrid(@asorm_caster) != 1) end;
+ if (@target_hat == 888) end; // FIXME: this whole 5 line block could be done with only one line if we modify getequipid OR make equip_ into params
+
+ set @_M_BLOCK, 1; // block casting, until the timer clears it
+ addtimer 1000, "Magic Timer::OnClear"; // set the new debuff
+ callfunc "adjust_spellpower";
+ set Sp, Sp - 15;
+ misceffect FX_MAGIC_BLUE, strcharinfo(0);
+ callfunc "magic_exp";
+
+ if (distance(BL_ID, @target_id) >= (@spellpower/30)+2) set @target_id, BL_ID;
+ if (BL_ID == @target_id) set @args$, strcharinfo(0);
+ if (BL_ID != @target_id) misceffect FX_MAGIC_DEFAULT, @args$;
+ set .@time, (@spellpower*200)+2000;
+ set @asorm_time, .@time, @target_id;
+ sc_start SC_MBARRIER, .@time, max(30,(@spellpower/8))+20, @target_id;
+ message @args$, "Barrier : You are surrounded by a magical barrier.";
+ if (attachrid(@target_id) != 1) end;
+ addtimer @asorm_time, strnpcinfo(0)+"::OnEnd";
+ end;
+
+OnEnd:
+ if (sc_check(SC_MBARRIER) != 1) end;
+ message strcharinfo(0), "Barrier : Your magical barrier dissipates.";
+ misceffect FX_MAGIC_DEFAULT, strcharinfo(0);
+ end;
+
+OnInit:
+ set .school, SKILL_MAGIC_ASTRAL;
+ set .invocation$, chr(MAGIC_SYMBOL) + "asorm"; // used in npcs that refer to this spell
+ void call("magic_register");
+ set .level, 2;
+ set .exp_gain, 3;
+ end;
+}
diff --git a/world/map/npc/magic/level2-detect-players.txt b/world/map/npc/magic/level2-detect-players.txt
new file mode 100644
index 00000000..9867b700
--- /dev/null
+++ b/world/map/npc/magic/level2-detect-players.txt
@@ -0,0 +1,33 @@
+-|script|detect-players|32767
+{
+ if(call("magic_checks")) end;
+ if (Sp < 7) end;
+ if (getskilllv(.school) < .level) end;
+ set @_M_BLOCK, 1; // block casting, until the timer clears it
+ addtimer 300, "Magic Timer::OnClear";
+ callfunc "adjust_spellpower";
+ set Sp, Sp - 7;
+ misceffect FX_MAGIC_GENERIC, strcharinfo(0);
+ callfunc "magic_exp";
+ set @inwilt$, "";
+ set .@d, @spellpower/2;
+ foreach 0, getmap(), POS_X - .@d, POS_Y - .@d, POS_X + .@d, POS_Y + .@d, strnpcinfo(0)+"::OnPC";
+ message strcharinfo(0), if_then_else(@inwilt$=="", "You sense no-one else nearby.", "You sense the following: "+@inwilt$);
+ end;
+
+OnPC:
+ if (@target_id == BL_ID) end; // do not count the caster
+ if (sc_check(SC_HIDE, @target_id)) end; // do not count players with anwiltyp
+ if (getpvpflag(1, @target_id)) end; // do not count invisible players
+ if (@inwilt$ != "") set @inwilt$, @inwilt$ + ", ";
+ set @inwilt$, @inwilt$ + strcharinfo(0, @target_id) + if_then_else(@spellpower > 99, "("+get(BaseLevel, @target_id)+")", "");
+ end;
+
+OnInit:
+ set .school, SKILL_MAGIC;
+ set .invocation$, chr(MAGIC_SYMBOL) + "inwilt"; // used in npcs that refer to this spell
+ void call("magic_register");
+ set .level, 2;
+ set .exp_gain, 0;
+ end;
+}
diff --git a/world/map/npc/magic/level2-enchant-lifestone.txt b/world/map/npc/magic/level2-enchant-lifestone.txt
new file mode 100644
index 00000000..ba8536bf
--- /dev/null
+++ b/world/map/npc/magic/level2-enchant-lifestone.txt
@@ -0,0 +1,36 @@
+-|script|enchant-lifestone|32767
+{
+ if(call("magic_checks")) end;
+ if (Sp < 15) end;
+ if (getskilllv(.school) < .level) end;
+ if (countitem("BugLeg") >= 1) delitem "BugLeg", 1;
+ elif (countitem("MaggotSlime") >= 1) delitem "MaggotSlime", 1;
+ elif (countitem("MauveHerb") >= 1 && countitem("AlizarinHerb") >= 1 && countitem("CobaltHerb") >= 1 && countitem("GambogeHerb") >= 1) goto L_Herbs;
+ else end;
+ goto L_Proceed;
+
+L_Herbs:
+ delitem "MauveHerb", 1;
+ delitem "AlizarinHerb", 1;
+ delitem "CobaltHerb", 1;
+ delitem "GambogeHerb", 1;
+ goto L_Proceed;
+
+L_Proceed:
+ set @_M_BLOCK, 1; // block casting, until the timer clears it
+ addtimer 4000, "Magic Timer::OnClear"; // set the new debuff
+ callfunc "adjust_spellpower";
+ set Sp, Sp - 15;
+ misceffect FX_MAGIC_GENERIC, strcharinfo(0);
+ getitem "Lifestone", 1;
+ callfunc "magic_exp";
+ end;
+
+OnInit:
+ set .school, SKILL_MAGIC;
+ set .invocation$, chr(MAGIC_SYMBOL) + "manpahil"; // used in npcs that refer to this spell
+ void call("magic_register");
+ set .level, 2;
+ set .exp_gain, 1;
+ end;
+}
diff --git a/world/map/npc/magic/level2-flying-backpack.txt b/world/map/npc/magic/level2-flying-backpack.txt
new file mode 100644
index 00000000..b87fba02
--- /dev/null
+++ b/world/map/npc/magic/level2-flying-backpack.txt
@@ -0,0 +1,41 @@
+-|script|flying-backpack|32767
+{
+ if(call("magic_checks")) end;
+ if (Sp < 12) end;
+ set .@level, getskilllv(.school);
+ if (.@level < .level) end;
+ if (getskilllv(SKILL_MAGIC) < .level) end;
+ if (.@level <= 3 && countitem("SilkCocoon") >= 1) delitem "SilkCocoon", 1;
+ elif (.@level <= 3) end;
+ set @_M_BLOCK, 1; // block casting, until the timer clears it
+ addtimer 1000, "Magic Timer::OnClear"; // set the new debuff
+ callfunc "adjust_spellpower";
+ set Sp, Sp - 12;
+ misceffect FX_MAGIC_GREEN, strcharinfo(0);
+ callfunc "magic_exp";
+ set @target_id, getcharid(3, @args$);
+ if (@target_id < 1 || !(isloggedin(@target_id))) set @target_id, BL_ID; // fallback to self
+ if (distance(BL_ID, @target_id) >= (@spellpower/30)+2) set @target_id, BL_ID;
+ if (BL_ID != @target_id) misceffect FX_MAGIC_GENERIC, @args$;
+ if (BL_ID == @target_id) set @args$, strcharinfo(0);
+ set @plugh_time, (@spellpower*500)+5000, @target_id;
+ sc_start SC_FLYING_BACKPACK, @plugh_time, 0, @target_id;
+ message @args$, "Backpack : Your backpack is lifted by a mystical force; you no longer feel it pressing on your back.";
+ if (attachrid(@target_id) != 1) end;
+ addtimer @plugh_time, strnpcinfo(0)+"::OnEnd";
+ end;
+
+OnEnd:
+ if (sc_check(SC_FLYING_BACKPACK) != 1) end;
+ message strcharinfo(0), "Backpack : Your backpack is no longer levitating.";
+ misceffect FX_MAGIC_GENERIC, strcharinfo(0);
+ end;
+
+OnInit:
+ set .school, SKILL_MAGIC_NATURE;
+ set .invocation$, chr(MAGIC_SYMBOL) + "plugh"; // used in npcs that refer to this spell
+ void call("magic_register");
+ set .level, 2;
+ set .exp_gain, 1;
+ end;
+}
diff --git a/world/map/npc/magic/level2-happy-curse.txt b/world/map/npc/magic/level2-happy-curse.txt
new file mode 100644
index 00000000..190c7d23
--- /dev/null
+++ b/world/map/npc/magic/level2-happy-curse.txt
@@ -0,0 +1,43 @@
+-|script|happy-curse|32767
+{
+ if(call("magic_checks")) end;
+ if (Sp < 13) end;
+ set .@level, getskilllv(.school);
+ if (.@level < .level) end;
+ if (getskilllv(SKILL_MAGIC) < .level) end;
+ if (.@level <= 3 && countitem("GingerBreadMan") >= 1) delitem "GingerBreadMan", 1;
+ elif (.@level <= 3) end;
+ set @target_id, getcharid(3, @args$);
+ if (@target_id < 1 || !(isloggedin(@target_id))) set @target_id, BL_ID; // fallback to self
+
+ set @_M_BLOCK, 1; // block casting, until the timer clears it
+ addtimer 1000, "Magic Timer::OnClear"; // set the new debuff
+ callfunc "adjust_spellpower";
+ set Sp, Sp - 13;
+ misceffect FX_MAGIC_GREEN, strcharinfo(0);
+ callfunc "magic_exp";
+
+ if (distance(BL_ID, @target_id) >= (@spellpower/100)+1) set @target_id, BL_ID;
+ if (BL_ID == @target_id) set @args$, strcharinfo(0);
+ set @joyplim_count, 1, @target_id;
+ set @joyplim_emote, if_then_else(getskilllv(SKILL_MAGIC_DARK) > 1, EMOTE_EVIL, EMOTE_HAPPY), @target_id;
+ set @joyplim_total, (@spellpower/10), @target_id;
+ if (attachrid(@target_id) != 1) end;
+ emotion @joyplim_emote, "self";
+ addtimer 500, strnpcinfo(0)+"::OnEmote";
+ end;
+
+OnEmote:
+ emotion @joyplim_emote, "self";
+ set @joyplim_count, @joyplim_count + 1;
+ if (@joyplim_count < @joyplim_total) addtimer 500, strnpcinfo(0)+"::OnEmote";
+ end;
+
+OnInit:
+ set .school, SKILL_MAGIC_NATURE;
+ set .invocation$, chr(MAGIC_SYMBOL) + "joyplim"; // used in npcs that refer to this spell
+ void call("magic_register");
+ set .level, 2;
+ set .exp_gain, 1;
+ end;
+}
diff --git a/world/map/npc/magic/level2-hide.txt b/world/map/npc/magic/level2-hide.txt
new file mode 100644
index 00000000..1895cff1
--- /dev/null
+++ b/world/map/npc/magic/level2-hide.txt
@@ -0,0 +1,45 @@
+-|script|spell-hide|32767
+{
+ if(call("magic_checks")) end;
+ if (Sp < 11) end;
+ set .@level, getskilllv(.school);
+ if (.@level < .level) end;
+ if (getskilllv(SKILL_MAGIC) < .level) end;
+ if (.@level <= 3 && countitem("CottonCloth") >= 1) delitem "CottonCloth", 1;
+ elif (.@level <= 3) end;
+ set @target_id, getcharid(3, @args$);
+ if (@target_id < 1 || !(isloggedin(@target_id))) set @target_id, BL_ID; // fallback to self
+
+ set @_M_BLOCK, 1; // block casting, until the timer clears it
+ addtimer 1000, "Magic Timer::OnClear"; // set the new debuff
+ callfunc "adjust_spellpower";
+ set Sp, Sp - 11;
+ misceffect FX_MAGIC_BLUE, strcharinfo(0);
+ callfunc "magic_exp";
+
+ if (distance(BL_ID, @target_id) >= (@spellpower/30)+2) set @target_id, BL_ID;
+ if (BL_ID == @target_id) set @args$, strcharinfo(0);
+ if (BL_ID != @target_id) misceffect FX_MAGIC_DEFAULT, @args$;
+ set .@time, (@spellpower*2500)+5000;
+ set @anwiltyp_time, .@time, @target_id;
+ sc_start SC_HIDE, .@time, 0, @target_id;
+ message @args$, "Magic : You are hidden!";
+ if (BL_ID != @target_id) message strcharinfo(0), "Magic : You hid someone!";
+ if (attachrid(@target_id) != 1) end;
+ addtimer @anwiltyp_time, strnpcinfo(0)+"::OnEnd";
+ end;
+
+OnEnd:
+ if (sc_check(SC_HIDE) != 1) end;
+ message strcharinfo(0), "Magic : You are no longer hidden.";
+ misceffect FX_MAGIC_GENERIC, strcharinfo(0);
+ end;
+
+OnInit:
+ set .school, SKILL_MAGIC_ASTRAL;
+ set .invocation$, chr(MAGIC_SYMBOL) + "anwiltyp"; // used in npcs that refer to this spell
+ void call("magic_register");
+ set .level, 2;
+ set .exp_gain, 2;
+ end;
+}
diff --git a/world/map/npc/magic/level2-lay-on-hands.txt b/world/map/npc/magic/level2-lay-on-hands.txt
new file mode 100644
index 00000000..4e3a1e9c
--- /dev/null
+++ b/world/map/npc/magic/level2-lay-on-hands.txt
@@ -0,0 +1,61 @@
+-|script|lay-on-hands|32767
+{
+ if(call("magic_checks")) end;
+ if (Sp < 10) end;
+ if (getskilllv(.school) < .level) end;
+ if (getskilllv(SKILL_MAGIC) < .level) end;
+ if (@args$ == "Mouboo" || @args$ == "mouboo") goto L_Mouboo;
+ set @target_id, getcharid(3, @args$);
+ if (@target_id < 1 || !(isloggedin(@target_id))) end;
+ if (Hp <= get(MaxHp, @target_id) / 20) end; // hp needs to be > 1/20 * target hp
+ callfunc "adjust_spellpower";
+ if (distance(BL_ID, @target_id) >= (((sqrt(@spellpower)*12)+@spellpower)/100)+2) end;
+ if (sc_check(SC_HALT_REGENERATE,@target_id)) end;
+ if (getequipid(equip_head, @args$) == 888) end; // magic gm top hat
+ set .@needed, get(MaxHp, @target_id) - get(Hp, @target_id);
+ goto L_Pay;
+
+L_Pay:
+ set @_M_BLOCK, 1; // block casting, until the timer clears it
+ addtimer 500, "Magic Timer::OnClear"; // XXX should this be 0 ?
+ set Sp, Sp - 10;
+ misceffect FX_MAGIC_WHITE, strcharinfo(0); // on caster
+ misceffect FX_MAGIC_WHITE, @args$; // on target
+
+ set .@fraction, max(80, 200 - (Vit + (@spellpower/10))); // pay at least 40%
+ set .@payment, (.@needed * .@fraction) / 200;
+ set .@available, Hp - (MaxHp / 20);
+ set .@heal_value, if_then_else(.@payment < .@available, .@needed+1-1, (.@available * 200) / .@fraction); // FIXME / XXX why the f do I need to do +1-1 ?
+ if (.@payment > .@available) set .@payment, .@available;
+
+ set @inma_power, .@heal_value, @target_id;
+
+ set @mexp, min(.exp_gain, .@payment/100);
+ callfunc "gain_heal_xp";
+ callfunc "magic_exp";
+
+ set .@dark, getskilllv(SKILL_MAGIC_DARK) >= 2; // true if dark magic user
+ set .@bad, (MaxHp/20)*(0-1);
+ if (.@dark) heal .@bad, 0;
+ sc_start SC_HALT_REGENERATE, if_then_else(.@dark, 5000, 10000), 0;
+
+ if (attachrid(@target_id) != 1) end;
+ if (!(isdead())) heal @inma_power, 0;
+ end;
+
+L_Mouboo:
+ set @spell, 1;
+ callfunc "QuestMoubooHeal";
+ set .@needed, 1000;
+ goto L_Pay;
+
+OnInit:
+ set .school, SKILL_MAGIC_LIFE;
+ set .invocation$, chr(MAGIC_SYMBOL) + "inma"; // used in npcs that refer to this spell
+ void call("magic_register");
+ set .level, 2;
+ set .exp_gain, 1; // this is MAX possible exp
+ set .heal_xp_value_divisor, 1;
+ set .base_exp_factor, 3;
+ end;
+}
diff --git a/world/map/npc/magic/level2-lightning-strike.txt b/world/map/npc/magic/level2-lightning-strike.txt
new file mode 100644
index 00000000..3032d5ab
--- /dev/null
+++ b/world/map/npc/magic/level2-lightning-strike.txt
@@ -0,0 +1,80 @@
+-|script|lightning-strike|32767
+{
+ if(call("magic_checks")) end;
+ if (Sp < 20) end;
+ if (getskilllv(SKILL_MAGIC) < .level) end;
+ set .@level, getskilllv(.school);
+ if (.@level < .level) end;
+ if (.@level <= 3 && countitem("IronPowder") >= 1) delitem "IronPowder", 1;
+ elif (.@level <= 3) end;
+ set @_M_BLOCK, 1; // block casting, until the timer clears it
+ addtimer 1000, "Magic Timer::OnClear"; // set the new debuff
+ callfunc "adjust_spellpower";
+ set Sp, Sp - 20;
+ misceffect FX_MAGIC_BLACK, strcharinfo(0);
+ setarray @ingravspell[0],
+ @spellpower,
+ Luk,
+ ((@spellpower/90)+1), // charges
+ (((200 - Agi) * 3000) / 200), // delay
+ 0, // in_rain
+ 0; // target id (tmp)
+
+ callfunc "magic_exp";
+ goto L_FreeRecast;
+
+OnAttack:
+ if (target(BL_ID, @target_id, 22) != 22) L_FreeRecast; // 0x10 | 0x02 | 0x04
+
+ set .@p, get(.max_radius, "rain") + 1;
+ set @ingravspell[5], @target_id; // store it because foreach overwrites it
+ foreach 1, getmap(), POS_X-.@p, POS_Y-.@p, POS_X+.@p, POS_Y+.@p, strnpcinfo(0)+"::OnNpc";
+ set @target_id, @ingravspell[5]; // now restore it
+
+ set @ingravspell[2], @ingravspell[2] - 1;
+ if (@ingravspell[4] & 1) goto L_InRain;
+ void call("elt_damage", @ingravspell[0], (@ingravspell[0]/2)+1, ELT_EARTH, ELT_WIND, FX_LIGHTNING1 + rand(3));
+ goto L_FreeRecast;
+
+L_FreeRecast:
+ if (@ingravspell[2] > 0)
+ addtimer 0, strnpcinfo(0) + "::OnSetRecast";
+ end;
+
+OnSetRecast:
+ overrideattack 1, @ingravspell[3], 8, ATTACK_ICON_GENERIC, 31, strnpcinfo(0)+"::OnAttack";
+ end;
+
+OnNpc:
+ set .@name$, strnpcinfo(0,@target_id);
+ explode .@nearby$[0], .@name$, "#";
+ if (.@nearby$[0] != "rain" && .@nearby$[1] != "rain") end;
+ setarray .@l[0], getnpcx(.@name$), getnpcy(.@name$), get(.radius, @target_id); // kaflosh x, y, radius
+ setarray @ingravspell[6], .@l[0]-.@l[2], .@l[1]-.@l[2], .@l[0]+.@l[2], .@l[1]+.@l[2]; // kaflosh x1, y1, x2, y2 <= this is "area"
+ if (POS_X >= @ingravspell[6] && POS_Y >= @ingravspell[7] && POS_X <= @ingravspell[8] && POS_Y <= @ingravspell[9])
+ set @ingravspell[4], @ingravspell[4] | 1;
+ end;
+
+L_InRain:
+ set @ingravspell[10], 0;
+ foreach 0, getmap(), @ingravspell[6], @ingravspell[7], @ingravspell[8], @ingravspell[9], strnpcinfo(0)+"::OnEntityInRain";
+ if (@ingravspell[10] >= 1 && (@ingravspell[1] + rand(200)) >= 150) goto L_FreeRecast;
+ misceffect FX_LIGHTNING1 + rand(3), strcharinfo(0);
+ heal 0 - @ingravspell[0], 0;
+ goto L_FreeRecast;
+
+OnEntityInRain:
+ if (target(BL_ID, @target_id, 16) != 16) end; // 0x10
+ if (@ingravspell[1] + rand(200) <= 175) end;
+ set @ingravspell[10], @ingravspell[10] + 1;
+ void call("elt_damage", @ingravspell[0]/6, (((@ingravspell[0]/2)+1)/3)+1, ELT_EARTH, ELT_WIND, FX_LIGHTNING1 + rand(3));
+ end;
+
+OnInit:
+ set .school, SKILL_MAGIC_WAR;
+ set .invocation$, chr(MAGIC_SYMBOL) + "ingrav"; // used in npcs that refer to this spell
+ void call("magic_register");
+ set .level, 2;
+ set .exp_gain, 2;
+ end;
+}
diff --git a/world/map/npc/magic/level2-magic-knuckles.txt b/world/map/npc/magic/level2-magic-knuckles.txt
new file mode 100644
index 00000000..0984a7fd
--- /dev/null
+++ b/world/map/npc/magic/level2-magic-knuckles.txt
@@ -0,0 +1,45 @@
+-|script|magic-knuckles|32767
+{
+ if(call("magic_checks")) end;
+ if (Sp < 20) end;
+ if (getskilllv(SKILL_MAGIC) < .level) end;
+ set .@level, getskilllv(.school);
+ if (.@level < .level) end;
+ if (.@level <= 3 && countitem("Beer") >= 1) delitem "Beer", 1;
+ elif (.@level <= 3) end;
+ set @_M_BLOCK, 1; // block casting, until the timer clears it
+ addtimer 500, "Magic Timer::OnClear"; // set the new debuff
+ callfunc "adjust_spellpower";
+ set Sp, Sp - 20;
+ misceffect FX_MAGIC_BLACK, strcharinfo(0);
+ setarray @upmarmuspell[0],
+ @spellpower,
+ ((@spellpower/10) + 10), // charges
+ (((200 - Agi) * 1300) / 200), // delay
+ Str; // do not allow to equip light armor, cast, and then switch to heavy armor to get bonus str
+ callfunc "magic_exp";
+ goto L_FreeRecast;
+
+OnAttack:
+ if (target(BL_ID, @target_id, 22) != 22) goto L_FreeRecast; // 0x10 | 0x02 | 0x04
+ void call("melee_damage", @upmarmuspell[0], @target_id, (30 + rand((@upmarmuspell[3]*2) + 5)));
+ set @upmarmuspell[1], @upmarmuspell[1] - 1;
+ goto L_FreeRecast;
+
+L_FreeRecast:
+ if (@upmarmuspell[1] > 0)
+ addtimer 0, strnpcinfo(0) + "::OnSetRecast";
+ end;
+
+OnSetRecast:
+ overrideattack 1, @upmarmuspell[2], 1, ATTACK_ICON_GENERIC, 34, strnpcinfo(0)+"::OnAttack";
+ end;
+
+OnInit:
+ set .school, SKILL_MAGIC_WAR;
+ set .invocation$, chr(MAGIC_SYMBOL) + "upmarmu"; // used in npcs that refer to this spell
+ void call("magic_register");
+ set .level, 2;
+ set .exp_gain, 1;
+ end;
+}
diff --git a/world/map/npc/magic/level2-make-arrows.txt b/world/map/npc/magic/level2-make-arrows.txt
new file mode 100644
index 00000000..5bad035b
--- /dev/null
+++ b/world/map/npc/magic/level2-make-arrows.txt
@@ -0,0 +1,27 @@
+-|script|make-arrows|32767
+{
+ if(call("magic_checks")) end;
+ if (Sp < 8) end;
+ if (getskilllv(SKILL_MAGIC) < .level) end;
+ if (getskilllv(.school) < .level) end;
+ if (countitem("RawLog") < 1) end;
+ delitem "RawLog", 1;
+ set @_M_BLOCK, 1; // block casting, until the timer clears it
+ addtimer 5000, "Magic Timer::OnClear"; // set the new debuff
+ callfunc "adjust_spellpower";
+ set Sp, Sp - 8;
+ misceffect FX_MAGIC_RED, strcharinfo(0);
+ setarray @create_params[0], (@spellpower/40)+1+(rand(max(1,(800-@spellpower)))/80), 500;
+ setarray @create_items$[0], "Arrow", "WarpedLog";
+ callfunc "magic_create_item";
+ callfunc "magic_exp";
+ end;
+
+OnInit:
+ set .school, SKILL_MAGIC_TRANSMUTE;
+ set .invocation$, chr(MAGIC_SYMBOL) + "kularzufrill"; // used in npcs that refer to this spell
+ void call("magic_register");
+ set .level, 2;
+ set .exp_gain, 1;
+ end;
+}
diff --git a/world/map/npc/magic/level2-make-iron-powder.txt b/world/map/npc/magic/level2-make-iron-powder.txt
new file mode 100644
index 00000000..55bdd0b9
--- /dev/null
+++ b/world/map/npc/magic/level2-make-iron-powder.txt
@@ -0,0 +1,27 @@
+-|script|make-iron-powder|32767
+{
+ if(call("magic_checks")) end;
+ if (Sp < 8) end;
+ if (getskilllv(SKILL_MAGIC) < .level) end;
+ if (getskilllv(.school) < .level) end;
+ if (countitem("IronOre") < 1) end;
+ delitem "IronOre", 1;
+ set @_M_BLOCK, 1; // block casting, until the timer clears it
+ addtimer 5000, "Magic Timer::OnClear"; // set the new debuff
+ callfunc "adjust_spellpower";
+ set Sp, Sp - 8;
+ misceffect FX_MAGIC_RED, strcharinfo(0);
+ setarray @create_params[0], (@spellpower/140)+1+(rand(max(1,(900-@spellpower)))/220), 700;
+ setarray @create_items$[0], "IronPowder", "IronOre";
+ callfunc "magic_create_item";
+ callfunc "magic_exp";
+ end;
+
+OnInit:
+ set .school, SKILL_MAGIC_TRANSMUTE;
+ set .invocation$, chr(MAGIC_SYMBOL) + "zukminbirf"; // used in npcs that refer to this spell
+ void call("magic_register");
+ set .level, 2;
+ set .exp_gain, 3;
+ end;
+}
diff --git a/world/map/npc/magic/level2-make-shirt.txt b/world/map/npc/magic/level2-make-shirt.txt
new file mode 100644
index 00000000..b7a1570f
--- /dev/null
+++ b/world/map/npc/magic/level2-make-shirt.txt
@@ -0,0 +1,25 @@
+-|script|make-shirt|32767
+{
+ if(call("magic_checks")) end;
+ if (Sp < 25) end;
+ if (getskilllv(.school) < .level) end;
+ if (countitem("CottonCloth") >= 5) delitem "CottonCloth", 5; else end;
+ set @_M_BLOCK, 1; // block casting, until the timer clears it
+ addtimer 5000, "Magic Timer::OnClear"; // set the new debuff
+ callfunc "adjust_spellpower";
+ set Sp, Sp - 25;
+ misceffect FX_MAGIC_RED, strcharinfo(0);
+ setarray @create_params[0], 1, 425;
+ setarray @create_items$[0], "CottonShirt", "CottonCloth";
+ callfunc "magic_create_item";
+ callfunc "magic_exp";
+ end;
+
+OnInit:
+ set .school, SKILL_MAGIC_TRANSMUTE;
+ set .invocation$, chr(MAGIC_SYMBOL) + "patmuploo"; // used in npcs that refer to this spell
+ void call("magic_register");
+ set .level, 2;
+ set .exp_gain, 2;
+ end;
+}
diff --git a/world/map/npc/magic/level2-make-short-tanktop.txt b/world/map/npc/magic/level2-make-short-tanktop.txt
new file mode 100644
index 00000000..eee48425
--- /dev/null
+++ b/world/map/npc/magic/level2-make-short-tanktop.txt
@@ -0,0 +1,25 @@
+-|script|make-short-tanktop|32767
+{
+ if(call("magic_checks")) end;
+ if (Sp < 25) end;
+ if (getskilllv(.school) < .level) end;
+ if (countitem("CottonCloth") >= 3) delitem "CottonCloth", 3; else end;
+ set @_M_BLOCK, 1; // block casting, until the timer clears it
+ addtimer 5000, "Magic Timer::OnClear"; // set the new debuff
+ callfunc "adjust_spellpower";
+ set Sp, Sp - 25;
+ misceffect FX_MAGIC_RED, strcharinfo(0);
+ setarray @create_params[0], 1, 250;
+ setarray @create_items$[0], "ShortTankTop", "CottonCloth";
+ callfunc "magic_create_item";
+ callfunc "magic_exp";
+ end;
+
+OnInit:
+ set .school, SKILL_MAGIC_TRANSMUTE;
+ set .invocation$, chr(MAGIC_SYMBOL) + "patviloree"; // used in npcs that refer to this spell
+ void call("magic_register");
+ set .level, 2;
+ set .exp_gain, 2;
+ end;
+}
diff --git a/world/map/npc/magic/level2-make-tanktop.txt b/world/map/npc/magic/level2-make-tanktop.txt
new file mode 100644
index 00000000..678cf650
--- /dev/null
+++ b/world/map/npc/magic/level2-make-tanktop.txt
@@ -0,0 +1,25 @@
+-|script|make-tanktop|32767
+{
+ if(call("magic_checks")) end;
+ if (Sp < 25) end;
+ if (getskilllv(.school) < .level) end;
+ if (countitem("CottonCloth") >= 4) delitem "CottonCloth", 4; else end;
+ set @_M_BLOCK, 1; // block casting, until the timer clears it
+ addtimer 5000, "Magic Timer::OnClear"; // set the new debuff
+ callfunc "adjust_spellpower";
+ set Sp, Sp - 25;
+ misceffect FX_MAGIC_RED, strcharinfo(0);
+ setarray @create_params[0], 1, 350;
+ setarray @create_items$[0], "TankTop", "CottonCloth";
+ callfunc "magic_create_item";
+ callfunc "magic_exp";
+ end;
+
+OnInit:
+ set .school, SKILL_MAGIC_TRANSMUTE;
+ set .invocation$, chr(MAGIC_SYMBOL) + "patloree"; // used in npcs that refer to this spell
+ void call("magic_register");
+ set .level, 2;
+ set .exp_gain, 2;
+ end;
+}
diff --git a/world/map/npc/magic/level2-protect.txt b/world/map/npc/magic/level2-protect.txt
new file mode 100644
index 00000000..e66aab3a
--- /dev/null
+++ b/world/map/npc/magic/level2-protect.txt
@@ -0,0 +1,50 @@
+-|script|protect|32767
+{
+ if(call("magic_checks")) end;
+ if (Sp < 14) end;
+ set .@level, getskilllv(.school);
+ if (.@level < .level) end;
+ if (getskilllv(SKILL_MAGIC) < .level) end;
+ if (.@level <= 3 && countitem("HardSpike") >= 1) delitem "HardSpike", 1;
+ elif (.@level <= 3) end;
+ set @target_id, getcharid(3, @args$);
+ if (@target_id < 1 || !(isloggedin(@target_id))) set @target_id, BL_ID; // fallback to self
+
+ set @betsanc_caster, BL_ID, @target_id;
+ if (attachrid(@target_id) != 1) end;
+ set @target_hat, getequipid(equip_head), @betsanc_caster;
+ if (attachrid(@betsanc_caster) != 1) end;
+ if (@target_hat == 888) end; // FIXME: this whole 5 line block could be done with only one line if we modify getequipid
+
+ set @_M_BLOCK, 1; // block casting, until the timer clears it
+ addtimer 1500, "Magic Timer::OnClear"; // set the new debuff
+ callfunc "adjust_spellpower";
+ set Sp, Sp - 14;
+ misceffect FX_MAGIC_GREEN, strcharinfo(0);
+ callfunc "magic_exp";
+
+ if (distance(BL_ID, @target_id) >= (@spellpower/30)+2) set @target_id, BL_ID;
+ if (BL_ID == @target_id) set @args$, strcharinfo(0);
+ misceffect FX_MAGIC_SHIELD, @args$;
+ set .@time, (@spellpower*1000)+5000;
+ set @betsanc_time, .@time, @target_id;
+ sc_start SC_PHYS_SHIELD, .@time, max(15,(@spellpower/20))+5, @target_id;
+ message @args$, "Shield : You feel more protected.";
+ if (attachrid(@target_id) != 1) end;
+ addtimer @betsanc_time, strnpcinfo(0)+"::OnEnd";
+ end;
+
+OnEnd:
+ if (sc_check(SC_PHYS_SHIELD) != 1) end;
+ message strcharinfo(0), "Shield : You feel less protected.";
+ misceffect FX_MAGIC_SHIELD_ENDS, strcharinfo(0);
+ end;
+
+OnInit:
+ set .school, SKILL_MAGIC_NATURE;
+ set .invocation$, chr(MAGIC_SYMBOL) + "betsanc"; // used in npcs that refer to this spell
+ void call("magic_register");
+ set .level, 2;
+ set .exp_gain, 2;
+ end;
+}
diff --git a/world/map/npc/magic/level2-rain.txt b/world/map/npc/magic/level2-rain.txt
new file mode 100644
index 00000000..d3718170
--- /dev/null
+++ b/world/map/npc/magic/level2-rain.txt
@@ -0,0 +1,104 @@
+-|script|rain|32767
+{
+ // we can not start here because for the puppets this is OnClick
+ end;
+
+OnCast:
+ if(call("magic_checks")) end;
+ if (getskilllv(.school) < .level) end;
+ if (getskilllv(SKILL_MAGIC) < .level) end;
+ if (Sp < 17) end;
+ explode .@map_ext[0], getmap(), "-";
+ if (.@map_ext[1] != 1) end; // XXX this is fugly, in the future let's use MF_OUTSIDE to detect if a map is "outside" or "inside"
+ if (getmapflag(getmap(), MF_TOWN)) end;
+ if (getskilllv(.school) < 4 && countitem("BottleOfWater") >= 1) delitem "BottleOfWater", 1;
+ elif (getskilllv(.school) < 4) end;
+ set Sp, Sp - 17;
+ set @_M_BLOCK, 1; // block casting, until the timer clears it
+ addtimer 3000, "Magic Timer::OnClear"; // set the new debuff
+
+ callfunc "adjust_spellpower";
+ set @krad, min(.max_radius,(min(@spellpower,200)/30)+3); // kaflosh radius
+
+ set @nearby, 0;
+ foreach 1, getmap(), POS_X - .max_radius, POS_Y - .max_radius, POS_X + .max_radius, POS_Y + .max_radius,
+ strnpcinfo(0) + "::OnNearbyNpc";
+ if (@nearby) goto L_Absorb;
+
+ set @new_npc_name$, "#" + strnpcinfo(0) + "#" + getcharid(3); // make a unique puppet name for every player
+ callfunc "magic_exp";
+ misceffect FX_MAGIC_GREEN, strcharinfo(0);
+ set @spell_npc, puppet(getmap(), POS_X, POS_Y, @new_npc_name$, 127); // clone npc => get puppet id
+ set .caster, getcharid(3), @spell_npc; // tell the puppet who controls it
+ set .radius, @krad, @spell_npc; // this is also used by ingrav, don't rename
+ set .initial_x, POS_X, @spell_npc;
+ set .initial_y, POS_Y, @spell_npc;
+ set .max, @spellpower/3, @spell_npc;
+ set .max_launch, min(200,@spellpower/2)/100, @spell_npc;
+ donpcevent @new_npc_name$+"::OnLaunch"; // start
+ addnpctimer 30000, @new_npc_name$+"::OnDestroy"; // this is just a failsafe in case the npc is not properly destroyed
+ if(isin("011-1", 85, 31, 103, 45)) goto L_Pumpkins;
+ end;
+
+L_Absorb:
+ message strcharinfo(0), "##3Rain : ##BA nearby raincloud absorbs your magic.";
+ end;
+
+OnNearbyNpc:
+ explode .@nearby$[0], strnpcinfo(0,@target_id), "#";
+ if(.@nearby$[1] == "DruidTree0" || .@nearby$[1] == "DruidTree0") goto L_Tree;
+ if(.@nearby$[0] == "rain" || .@nearby$[1] == "rain")
+ set @nearby, @nearby + 1;
+ end;
+
+L_Pumpkins:
+ callfunc "HalloweenQuestWaterPumpkins";
+ end;
+
+L_Tree:
+ set .@x, get(POS_X, @target_id); set .@y, get(POS_Y, @target_id);
+ if (.@x < POS_X-@krad || .@y < POS_Y-@krad || .@x > POS_X+@krad || .@y > POS_Y+@krad) end; // in max radius but not in puppet area
+ set @flag, 1;
+ callfunc "QuestTreeTrigger";
+ close;
+
+OnLaunch:
+ if(attachrid(.caster) != 1) destroy; // destroy if caster is missing
+ if(getmap() != strnpcinfo(3)) destroy; // destroy if caster left the map
+ set .count, .count + 1;
+ if(.count > .max) destroy;
+ set .launch, 0;
+ callsub S_Launch;
+ addnpctimer 400 + rand(100), strnpcinfo(0)+"::OnLaunch"; // loop until max
+ end;
+
+S_Launch:
+ npcareawarp .initial_x - .radius, .initial_y - .radius, .initial_x + .radius, .initial_y + .radius, 0, strnpcinfo(0);
+ misceffect FX_RAIN;
+ foreach 2, strnpcinfo(3), getnpcx()-1, getnpcy()-1, getnpcx()+1, getnpcy()+1, strnpcinfo(0) + "::OnHit";
+ set .launch, .launch + 1;
+ if(.launch < .max_launch) goto S_Launch;
+ return;
+
+OnHit:
+ if(attachrid(.caster) != 1) destroy; // destroy if caster is missing
+ if(getmap() != strnpcinfo(3)) destroy; // destroy if caster left the map
+ if(target(.caster, @target_id, 16) != 16 && .caster != @target_id) end;
+ if((get(BL_TYPE, @target_id) & 1) == 0) end; // either mob or pc
+ if(get(ELTTYPE, @target_id) == ELT_FIRE)
+ injure .caster, @target_id, rand((@spellpower/15)+5)+2;
+ end;
+
+OnDestroy:
+ debugmes "kaflosh timeout! [this shouldn't happen]";
+ destroy;
+
+OnInit:
+ set .school, SKILL_MAGIC_NATURE;
+ set .invocation$, chr(MAGIC_SYMBOL) + "kaflosh"; // used in npcs that refer to this spell
+ void call("magic_register", "OnCast");
+ set .level, 2;
+ set .exp_gain, 1;
+ set .max_radius, 15;
+ end;
+}
diff --git a/world/map/npc/magic/level2-shear.txt b/world/map/npc/magic/level2-shear.txt
new file mode 100644
index 00000000..af825727
--- /dev/null
+++ b/world/map/npc/magic/level2-shear.txt
@@ -0,0 +1,60 @@
+-|script|shear|32767
+{
+ if(call("magic_checks")) end;
+ if (Sp < 23) end;
+ if (getskilllv(SKILL_MAGIC) < .level) end;
+ if (getskilllv(.school) < .level) end;
+ set @_M_BLOCK, 1; // block casting, until the timer clears it
+ addtimer 1000, "Magic Timer::OnClear"; // set the new debuff
+ callfunc "adjust_spellpower";
+ set Sp, Sp - 23;
+ misceffect FX_MAGIC_GREEN, strcharinfo(0);
+ setarray @chipchipspell[0],
+ @spellpower,
+ (((200 - Agi) * 2000) / 200); //delay
+ overrideattack 1, @chipchipspell[1], 1, ATTACK_ICON_SHEARING, 30, strnpcinfo(0)+"::OnAttack";
+ callfunc "magic_exp";
+ end;
+
+OnAttack:
+ if (isloggedin(@target_id)) goto L_FreeRecast; // can not shear a player
+ if (sc_check(SC_SHEARED, @target_id)) goto L_FreeRecast; // mob already sheared
+ if (target(BL_ID, @target_id, 22) != 22) goto L_FreeRecast; // 0x10 | 0x02 | 0x04
+ sc_start SC_SHEARED, 600000, 0, @target_id;
+ set .@score, rand(1000 - rand(@chipchipspell[0]));
+ set .@id, get(Class, @target_id); // get the mob ID
+
+ if (.@id == 1020 && .@score < 300) set .@item$, "WhiteFur"; // Fluffy
+ elif (.@id == 1027 && .@score < 300) set .@item$, "WhiteFur"; // EasterFluffy
+ elif (.@id == 1019 && .@score < 250) set .@item$, "HardSpike"; // SpikyMushroom
+ elif (.@id == 1028 && .@score < 175) set .@item$, "CottonCloth"; // Mouboo
+ elif (.@id == 1029 && .@score < 700) set .@item$, "MauveHerb"; // MauvePlant
+ elif (.@id == 1030 && .@score < 700) set .@item$, "CobaltHerb"; // CobaltPlant
+ elif (.@id == 1031 && .@score < 700) set .@item$, "GambogeHerb"; // GambogePlant
+ elif (.@id == 1032 && .@score < 700) set .@item$, "AlizarinHerb"; // AlizarinPlant
+ elif (.@id == 1035 && .@score < 300) set .@item$, "SilkCocoon"; // SilkWorm
+ elif (.@id == 1018 && .@score < 180) set .@item$, "PinkAntenna"; // Pinkie
+ else end;
+ makeitem .@item$, 1, getmap(), rand(POS_X - 1, POS_X + 1), rand(POS_Y - 1, POS_Y + 1);
+
+ if (.@id != 1020 && .@id != 1028 && .@id != 1018 && rand(2) != 1) end;
+ set @value, 1;
+ callfunc "QuestSagathaHappy";
+ end;
+
+L_FreeRecast:
+ addtimer 0, strnpcinfo(0) + "::OnSetRecast"; // we can't do it while already overridden, until it reaches a script terminator
+ end;
+
+OnSetRecast:
+ overrideattack 1, @chipchipspell[1], 1, ATTACK_ICON_SHEARING, 30, strnpcinfo(0)+"::OnAttack";
+ end;
+
+OnInit:
+ set .school, SKILL_MAGIC_NATURE;
+ set .invocation$, chr(MAGIC_SYMBOL) + "chipchip"; // used in npcs that refer to this spell
+ void call("magic_register");
+ set .level, 2;
+ set .exp_gain, 0;
+ end;
+}
diff --git a/world/map/npc/magic/level2-summon-fluffies.txt b/world/map/npc/magic/level2-summon-fluffies.txt
new file mode 100644
index 00000000..cd754e33
--- /dev/null
+++ b/world/map/npc/magic/level2-summon-fluffies.txt
@@ -0,0 +1,54 @@
+-|script|smfluffies|32767
+{
+ end;
+
+OnCast:
+ if(call("magic_checks")) end;
+ if (Sp < 39) end;
+ if (getskilllv(SKILL_MAGIC) < .level) end;
+ if (getskilllv(.school) < .level) end;
+ if (countitem("WhiteFur") < 1 || countitem("Root") < 1) end;
+ delitem "WhiteFur", 1;
+ delitem "Root", 1;
+ set @_M_BLOCK, 1; // block casting, until the timer clears it
+ addtimer 20000, "Magic Timer::OnClear"; // set the new debuff
+ callfunc "adjust_spellpower";
+ set Sp, Sp - 39;
+ misceffect FX_MAGIC_BLUE, strcharinfo(0);
+ misceffect FX_PENTAGRAM_BUILDUP, strcharinfo(0);
+ callfunc "magic_exp";
+ set .@puppet$, "#"+strnpcinfo(0)+"#"+BL_ID;
+ set .@puppet, puppet(getmap(), POS_X, POS_Y, .@puppet$, 127);
+ set .count, (@spellpower/170)+1+(@spellpower/430), .@puppet;
+ set .master, BL_ID, .@puppet;
+ set .lifetime, @spellpower*350, .@puppet;
+ addnpctimer 5000-(@spellpower*8), .@puppet$+"::OnSummon";
+ addnpctimer 6000, .@puppet$+"::OnDestroy";
+ end;
+
+OnSummon:
+ specialeffect FX_PENTAGRAM_BURST;
+ set .@i, 0;
+ set .@x, getnpcx();
+ set .@y, getnpcy();
+ set .@map$, strnpcinfo(3);
+ callsub S_SummonAll;
+ end;
+
+OnDestroy:
+ destroy;
+
+S_SummonAll:
+ summon .@map$, rand(.@x-2,.@x+2), rand(.@y-2,.@y+2), .master, 1020, 2, .lifetime;
+ set .@i, .@i + 1;
+ if (.@i < .count) goto S_SummonAll;
+ return;
+
+OnInit:
+ set .school, SKILL_MAGIC_ASTRAL;
+ set .invocation$, chr(MAGIC_SYMBOL) + "kalakarenk"; // used in npcs that refer to this spell
+ void call("magic_register", "OnCast");
+ set .level, 2;
+ set .exp_gain, 1;
+ end;
+}
diff --git a/world/map/npc/magic/level2-summon-mouboo.txt b/world/map/npc/magic/level2-summon-mouboo.txt
new file mode 100644
index 00000000..8eb074c6
--- /dev/null
+++ b/world/map/npc/magic/level2-summon-mouboo.txt
@@ -0,0 +1,54 @@
+-|script|smmouboo|32767
+{
+ end;
+
+OnCast:
+ if(call("magic_checks")) end;
+ if (Sp < 35) end;
+ if (getskilllv(SKILL_MAGIC) < .level) end;
+ if (getskilllv(.school) < .level) end;
+ if (countitem("MoubooFigurine") < 1 || countitem("Root") < 1) end;
+ delitem "MoubooFigurine", 1;
+ delitem "Root", 1;
+ set @_M_BLOCK, 1; // block casting, until the timer clears it
+ addtimer 20000, "Magic Timer::OnClear"; // set the new debuff
+ callfunc "adjust_spellpower";
+ set Sp, Sp - 35;
+ misceffect FX_MAGIC_BLUE, strcharinfo(0);
+ misceffect FX_PENTAGRAM_BUILDUP, strcharinfo(0);
+ callfunc "magic_exp";
+ set .@puppet$, "#"+strnpcinfo(0)+"#"+BL_ID;
+ set .@puppet, puppet(getmap(), POS_X, POS_Y, .@puppet$, 127);
+ set .count, (@spellpower/270)+1, .@puppet;
+ set .master, BL_ID, .@puppet;
+ set .lifetime, @spellpower*100, .@puppet;
+ addnpctimer 4000-(@spellpower*9), .@puppet$+"::OnSummon";
+ addnpctimer 6000, .@puppet$+"::OnDestroy";
+ end;
+
+OnSummon:
+ specialeffect FX_PENTAGRAM_BURST;
+ set .@i, 0;
+ set .@x, getnpcx();
+ set .@y, getnpcy();
+ set .@map$, strnpcinfo(3);
+ callsub S_SummonAll;
+ end;
+
+OnDestroy:
+ destroy;
+
+S_SummonAll:
+ summon .@map$, rand(.@x-2,.@x+2), rand(.@y-2,.@y+2), .master, 1028, 2, .lifetime;
+ set .@i, .@i + 1;
+ if (.@i < .count) goto S_SummonAll;
+ return;
+
+OnInit:
+ set .school, SKILL_MAGIC_ASTRAL;
+ set .invocation$, chr(MAGIC_SYMBOL) + "kalboo"; // used in npcs that refer to this spell
+ void call("magic_register", "OnCast");
+ set .level, 2;
+ set .exp_gain, 2;
+ end;
+}
diff --git a/world/map/npc/magic/level2-summon-pinkie.txt b/world/map/npc/magic/level2-summon-pinkie.txt
new file mode 100644
index 00000000..b91ec1d9
--- /dev/null
+++ b/world/map/npc/magic/level2-summon-pinkie.txt
@@ -0,0 +1,54 @@
+-|script|smpinkie|32767
+{
+ end;
+
+OnCast:
+ if(call("magic_checks")) end;
+ if (Sp < 35) end;
+ if (getskilllv(SKILL_MAGIC) < .level) end;
+ if (getskilllv(.school) < .level) end;
+ if (countitem("PinkAntenna") < 1 || countitem("Root") < 1) end;
+ delitem "PinkAntenna", 1;
+ delitem "Root", 1;
+ set @_M_BLOCK, 1; // block casting, until the timer clears it
+ addtimer 20000, "Magic Timer::OnClear"; // set the new debuff
+ callfunc "adjust_spellpower";
+ set Sp, Sp - 35;
+ misceffect FX_MAGIC_BLUE, strcharinfo(0);
+ misceffect FX_PENTAGRAM_BUILDUP, strcharinfo(0);
+ callfunc "magic_exp";
+ set .@puppet$, "#"+strnpcinfo(0)+"#"+BL_ID;
+ set .@puppet, puppet(getmap(), POS_X, POS_Y, .@puppet$, 127);
+ set .count, (@spellpower/120)+1, .@puppet;
+ set .master, BL_ID, .@puppet;
+ set .lifetime, @spellpower*150, .@puppet;
+ addnpctimer 5000-(@spellpower*9), .@puppet$+"::OnSummon";
+ addnpctimer 6000, .@puppet$+"::OnDestroy";
+ end;
+
+OnSummon:
+ specialeffect FX_PENTAGRAM_BURST;
+ set .@i, 0;
+ set .@x, getnpcx();
+ set .@y, getnpcy();
+ set .@map$, strnpcinfo(3);
+ callsub S_SummonAll;
+ end;
+
+OnDestroy:
+ destroy;
+
+S_SummonAll:
+ summon .@map$, rand(.@x-2,.@x+2), rand(.@y-2,.@y+2), .master, 1018, 2, .lifetime;
+ set .@i, .@i + 1;
+ if (.@i < .count) goto S_SummonAll;
+ return;
+
+OnInit:
+ set .school, SKILL_MAGIC_ASTRAL;
+ set .invocation$, chr(MAGIC_SYMBOL) + "kalgina"; // used in npcs that refer to this spell
+ void call("magic_register", "OnCast");
+ set .level, 2;
+ set .exp_gain, 2;
+ end;
+}
diff --git a/world/map/npc/magic/level2-summon-snakes.txt b/world/map/npc/magic/level2-summon-snakes.txt
new file mode 100644
index 00000000..7490c506
--- /dev/null
+++ b/world/map/npc/magic/level2-summon-snakes.txt
@@ -0,0 +1,55 @@
+-|script|summon-snakes|32767
+{
+ end;
+
+OnCast:
+ if(call("magic_checks")) end;
+ if (Sp < 40) end;
+ if (getskilllv(SKILL_MAGIC) < .level) end;
+ if (getskilllv(.school) < .level) end;
+ if (countitem("DarkCrystal") < 1 || countitem("SnakeEgg") < 1) end;
+ if (OrumQuest <= 40) end;
+ delitem "DarkCrystal", 1;
+ delitem "SnakeEgg", 1;
+ set @_M_BLOCK, 1; // block casting, until the timer clears it
+ addtimer 15000, "Magic Timer::OnClear"; // set the new debuff
+ callfunc "adjust_spellpower";
+ set Sp, Sp - 40;
+ misceffect FX_MAGIC_DARKRED, strcharinfo(0);
+ misceffect FX_PENTAGRAM_BUILDUP, strcharinfo(0);
+ callfunc "magic_exp";
+ set .@puppet$, "#"+strnpcinfo(0)+"#"+BL_ID;
+ set .@puppet, puppet(getmap(), POS_X, POS_Y, .@puppet$, 127);
+ set .count, (@spellpower/300)+1, .@puppet;
+ set .master, BL_ID, .@puppet;
+ set .lifetime, @spellpower*80, .@puppet;
+ addnpctimer 4000-(@spellpower*9), .@puppet$+"::OnSummon";
+ addnpctimer 6000, .@puppet$+"::OnDestroy";
+ end;
+
+OnSummon:
+ specialeffect FX_PENTAGRAM_BURST;
+ set .@i, 0;
+ set .@x, getnpcx();
+ set .@y, getnpcy();
+ set .@map$, strnpcinfo(3);
+ callsub S_SummonAll;
+ end;
+
+OnDestroy:
+ destroy;
+
+S_SummonAll:
+ summon .@map$, rand(.@x-2,.@x+2), rand(.@y-2,.@y+2), .master, 1010, 2, .lifetime;
+ set .@i, .@i + 1;
+ if (.@i < .count) goto S_SummonAll;
+ return;
+
+OnInit:
+ set .school, SKILL_MAGIC_DARK;
+ set .invocation$, chr(MAGIC_SYMBOL) + "halhiss"; // used in npcs that refer to this spell
+ void call("magic_register", "OnCast");
+ set .level, 2;
+ set .exp_gain, 3;
+ end;
+}
diff --git a/world/map/npc/magic/level2-summon-spiky-mushroom.txt b/world/map/npc/magic/level2-summon-spiky-mushroom.txt
new file mode 100644
index 00000000..39ad9ecd
--- /dev/null
+++ b/world/map/npc/magic/level2-summon-spiky-mushroom.txt
@@ -0,0 +1,54 @@
+-|script|smsmushrooms|32767
+{
+ end;
+
+OnCast:
+ if(call("magic_checks")) end;
+ if (Sp < 33) end;
+ if (getskilllv(SKILL_MAGIC) < .level) end;
+ if (getskilllv(.school) < .level) end;
+ if (countitem("HardSpike") < 1 || countitem("Root") < 1) end;
+ delitem "HardSpike", 1;
+ delitem "Root", 1;
+ set @_M_BLOCK, 1; // block casting, until the timer clears it
+ addtimer 20000, "Magic Timer::OnClear"; // set the new debuff
+ callfunc "adjust_spellpower";
+ set Sp, Sp - 33;
+ misceffect FX_MAGIC_BLUE, strcharinfo(0);
+ misceffect FX_PENTAGRAM_BUILDUP, strcharinfo(0);
+ callfunc "magic_exp";
+ set .@puppet$, "#"+strnpcinfo(0)+"#"+BL_ID;
+ set .@puppet, puppet(getmap(), POS_X, POS_Y, .@puppet$, 127);
+ set .count, (@spellpower/120)+1, .@puppet;
+ set .master, BL_ID, .@puppet;
+ set .lifetime, @spellpower*400, .@puppet;
+ addnpctimer 5000-(@spellpower*9), .@puppet$+"::OnSummon";
+ addnpctimer 6000, .@puppet$+"::OnDestroy";
+ end;
+
+OnSummon:
+ specialeffect FX_PENTAGRAM_BURST;
+ set .@i, 0;
+ set .@x, getnpcx();
+ set .@y, getnpcy();
+ set .@map$, strnpcinfo(3);
+ callsub S_SummonAll;
+ end;
+
+OnDestroy:
+ destroy;
+
+S_SummonAll:
+ summon .@map$, rand(.@x-2,.@x+2), rand(.@y-2,.@y+2), .master, 1019, 2, .lifetime;
+ set .@i, .@i + 1;
+ if (.@i < .count) goto S_SummonAll;
+ return;
+
+OnInit:
+ set .school, SKILL_MAGIC_ASTRAL;
+ set .invocation$, chr(MAGIC_SYMBOL) + "kalrenk"; // used in npcs that refer to this spell
+ void call("magic_register", "OnCast");
+ set .level, 2;
+ set .exp_gain, 1;
+ end;
+}
diff --git a/world/map/npc/magic/level2-summon-wickedmushroom.txt b/world/map/npc/magic/level2-summon-wickedmushroom.txt
new file mode 100644
index 00000000..df17742f
--- /dev/null
+++ b/world/map/npc/magic/level2-summon-wickedmushroom.txt
@@ -0,0 +1,55 @@
+-|script|smwmushroom|32767
+{
+ end;
+
+OnCast:
+ if(call("magic_checks")) end;
+ if (Sp < 35) end;
+ if (getskilllv(SKILL_MAGIC) < .level) end;
+ if (getskilllv(.school) < .level) end;
+ if (countitem("DarkCrystal") < 1 || countitem("SmallMushroom") < 1) end;
+ if (OrumQuest <= 36) end;
+ delitem "DarkCrystal", 1;
+ delitem "SmallMushroom", 1;
+ set @_M_BLOCK, 1; // block casting, until the timer clears it
+ addtimer 15000, "Magic Timer::OnClear"; // set the new debuff
+ callfunc "adjust_spellpower";
+ set Sp, Sp - 35;
+ misceffect FX_MAGIC_DARKRED, strcharinfo(0);
+ misceffect FX_PENTAGRAM_BUILDUP, strcharinfo(0);
+ callfunc "magic_exp";
+ set .@puppet$, "#"+strnpcinfo(0)+"#"+BL_ID;
+ set .@puppet, puppet(getmap(), POS_X, POS_Y, .@puppet$, 127);
+ set .count, (@spellpower/250)+1, .@puppet;
+ set .master, BL_ID, .@puppet;
+ set .lifetime, @spellpower*80, .@puppet;
+ addnpctimer 4000-(@spellpower*9), .@puppet$+"::OnSummon";
+ addnpctimer 6000, .@puppet$+"::OnDestroy";
+ end;
+
+OnSummon:
+ specialeffect FX_PENTAGRAM_BURST;
+ set .@i, 0;
+ set .@x, getnpcx();
+ set .@y, getnpcy();
+ set .@map$, strnpcinfo(3);
+ callsub S_SummonAll;
+ end;
+
+OnDestroy:
+ destroy;
+
+S_SummonAll:
+ summon .@map$, rand(.@x-2,.@x+2), rand(.@y-2,.@y+2), .master, 1106, 2, .lifetime;
+ set .@i, .@i + 1;
+ if (.@i < .count) goto S_SummonAll;
+ return;
+
+OnInit:
+ set .school, SKILL_MAGIC_DARK;
+ set .invocation$, chr(MAGIC_SYMBOL) + "helorp"; // used in npcs that refer to this spell
+ void call("magic_register", "OnCast");
+ set .level, 2;
+ set .exp_gain, 3;
+ end;
+}
diff --git a/world/map/npc/magic/level2-toxic-dart.txt b/world/map/npc/magic/level2-toxic-dart.txt
new file mode 100644
index 00000000..357ae32b
--- /dev/null
+++ b/world/map/npc/magic/level2-toxic-dart.txt
@@ -0,0 +1,51 @@
+-|script|toxic-dart|32767
+{
+ if(call("magic_checks")) end;
+ if (Sp < 15) end;
+ set .@level, getskilllv(.school);
+ if (.@level < .level) end;
+ if (OrumQuest <= 37) end;
+ if (.@level <= 2 && countitem("Root") >= 2) delitem "Root", 2;
+ elif (.@level <= 2) end;
+ set @_M_BLOCK, 1; // block casting, until the timer clears it
+ addtimer 500, "Magic Timer::OnClear"; // set the new debuff
+ callfunc "adjust_spellpower";
+ set Sp, Sp - 15;
+ misceffect FX_MAGIC_DARKRED, strcharinfo(0);
+ setarray @phlexspell[0],
+ (sqrt(@spellpower) * 5), // elt damage
+ ((BaseLevel/3) + 5), // elt damage bonus
+ (((200 - Agi) * 1200) / 200), // delay
+ ((@spellpower/75) + 3), // charges
+ (5000+(@spellpower*1200)), // poison duration
+ (max(15,@spellpower/15)+5); // poison strength
+
+ callfunc "magic_exp";
+ goto L_FreeRecast;
+
+OnAttack:
+ if (target(BL_ID, @target_id, 50) != 50) goto L_FreeRecast; // 0x20 | 0x02 | 0x10
+ misceffect FX_MAGIC_DARKRED, strcharinfo(0);
+ void call("elt_damage", @phlexspell[0], @phlexspell[1], ELT_NEUTRAL, ELT_POISON, FX_FIRE_BURST);
+ if(@target_id != BL_ID && isloggedin(@target_id)) // this is a dirty trick to check if the target is a player
+ sc_start sc_poison, @phlexspell[4], @phlexspell[5], @target_id;
+ set @phlexspell[3], @phlexspell[3] - 1;
+ goto L_FreeRecast;
+
+L_FreeRecast:
+ if (@phlexspell[3] > 0)
+ addtimer 0, strnpcinfo(0) + "::OnSetRecast";
+ end;
+
+OnSetRecast:
+ overrideattack 1, @phlexspell[2], 4, ATTACK_ICON_GENERIC, 31, strnpcinfo(0)+"::OnAttack";
+ end;
+
+OnInit:
+ set .school, SKILL_MAGIC_DARK;
+ set .invocation$, chr(MAGIC_SYMBOL) + "phlex"; // used in npcs that refer to this spell
+ void call("magic_register");
+ set .level, 2;
+ set .exp_gain, 3;
+ end;
+}
diff --git a/world/map/npc/magic/level3-necromancy.txt b/world/map/npc/magic/level3-necromancy.txt
new file mode 100644
index 00000000..ef2d761f
--- /dev/null
+++ b/world/map/npc/magic/level3-necromancy.txt
@@ -0,0 +1,55 @@
+// see https://tmworld.uservoice.com/forums/255809-general/suggestions/6051818-sacrifice
+// author: gumi
+-|script|necromancy|32767
+{
+ if(call("magic_checks")) end;
+ if (Sp < 50) end;
+ if (getskilllv(.school) < .level) end;
+ if (getskilllv(SKILL_MAGIC) < .level) end;
+ set @target_id, getcharid(3, @args$);
+ if (@target_id < 1 || !(isloggedin(@target_id))) end;
+ if (get(Hp, @target_id) > 0) end;
+ if (Hp < (get(MaxHp, @target_id) / 3)) end; // hp must be at least a third of the max hp of the target
+ callfunc "adjust_spellpower";
+ if (distance(BL_ID, @target_id) >= (((sqrt(@spellpower)*12)+@spellpower)/100)+2) end;
+ if (get(@necromancer, @target_id) > 0) end; // someone else is already trying to resurrect this player
+ if (getmapflag(getmap(), MF_NOSAVE)) end; // do not allow for maps like illia or candor
+ if (countitem("Soul") >= 1) delitem "Soul", 1; else end;
+
+ set @_M_BLOCK, 1; // block casting, until the timer clears it
+ addtimer 20000, "Magic Timer::OnClear";
+ set Sp, Sp - 50;
+ misceffect FX_MAGIC_DARKRED, strcharinfo(0); // on caster
+ misceffect FX_PENTAGRAM_BUILDUP, @args$; // on target
+
+ set @necromancer, CHAR_ID, @target_id; // tell the target who is reviving them
+
+ if (attachrid(@target_id) != 1) end;
+ addtimer 6000, strnpcinfo(0)+"::OnRevive"; // TODO: make it take more or less time depending on the spell power
+ end;
+
+OnRevive:
+ set .@necro, get(BL_ID, @necromancer);
+ if (.@necro < 1) goto L_Clean;
+ if (get(Hp, .@necro) < 1) end;
+ misceffect FX_PENTAGRAM_BURST, strcharinfo(0);
+ misceffect FX_CRITICAL, strcharinfo(0, .@necro);
+ heal 1, 0; // revive
+ set Hp, 1;
+ set Sp, 0;
+ set Hp, 1, .@necro;
+ set Sp, 0, .@necro;
+ goto L_Clean;
+
+L_Clean:
+ set @necromancer, 0;
+ end;
+
+OnInit:
+ set .school, SKILL_MAGIC_DARK;
+ set .invocation$, chr(MAGIC_SYMBOL) + "nevela"; // used in npcs that refer to this spell
+ void call("magic_register");
+ set .level, 3;
+ set .exp_gain, 1;
+ end;
+}
diff --git a/world/map/npc/scripts.conf b/world/map/npc/scripts.conf
index e9bceb20..0935f246 100644
--- a/world/map/npc/scripts.conf
+++ b/world/map/npc/scripts.conf
@@ -14,12 +14,9 @@ npc: npc/functions/mob_points.txt
npc: npc/functions/process_equip.txt
npc: npc/functions/slot_machine.txt
npc: npc/functions/soul_menhir.txt
-npc: npc/functions/strangerquiz.txt
npc: npc/functions/time.txt
npc: npc/functions/water_bottle.txt
npc: npc/functions/evil_obelisk.txt
-npc: npc/functions/debug.txt
-npc: npc/functions/superdebug.txt
npc: npc/functions/announcements.txt
npc: npc/functions/lockpicking.txt
npc: npc/functions/default_npc_checks.txt
@@ -32,9 +29,9 @@ npc: npc/functions/dynamic_menu.txt
npc: npc/functions/DyeConfig.txt
npc: npc/functions/motd.txt
npc: npc/functions/motdconfig.txt
+npc: npc/functions/hug.txt
// Item Functions
-npc: npc/items/magic_gm_top_hat.txt
npc: npc/items/purification_potion.txt
npc: npc/items/scissors.txt
npc: npc/items/pickled_beets.txt
@@ -50,6 +47,12 @@ npc: npc/items/mirror.txt
npc: npc/items/rubber_bat.txt
import: npc/_import.txt
+// magic
+import: npc/magic/_import.txt
+
+// GM commands
+import: npc/commands/_import.txt
+
// GM Events
npc: npc/functions/gm_island.txt
// Annuals Framework