summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--world/map/conf/magic-anchors.sex66
-rw-r--r--world/map/conf/magic-config.sex68
-rw-r--r--world/map/conf/magic-misc.sex105
-rw-r--r--world/map/conf/magic-procedures.sex340
-rw-r--r--world/map/conf/magic-quickdebug.sex10
-rw-r--r--world/map/db/item_db_head.txt2
-rw-r--r--world/map/db/params.txt2
-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-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-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.txt2
-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.txt4
-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-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.txt38
-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/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-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-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-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/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-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-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-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-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-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-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-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.txt27
-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-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-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/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-2/_import.txt3
-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.txt48
-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/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/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/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/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/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-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/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.txt116
-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/README.md140
-rw-r--r--world/map/npc/commands/_atcommand_local.txt.example21
-rw-r--r--world/map/npc/commands/_import.txt5
-rw-r--r--world/map/npc/commands/_procedures.txt2
-rw-r--r--world/map/npc/commands/changesex.txt34
-rw-r--r--world/map/npc/commands/class.txt33
-rw-r--r--[-rwxr-xr-x]world/map/npc/commands/debug.txt (renamed from world/map/npc/functions/debug.txt)10
-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)4
-rw-r--r--world/map/npc/commands/zeny.txt12
-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.txt6
-rw-r--r--world/map/npc/functions/global_event_handler.txt8
-rw-r--r--world/map/npc/functions/superdebug.txt69
-rw-r--r--world/map/npc/magic/README.md22
-rw-r--r--world/map/npc/magic/_import.txt1
-rw-r--r--world/map/npc/magic/_procedures.txt19
-rw-r--r--world/map/npc/magic/level0-wand.txt12
-rw-r--r--world/map/npc/magic/level1-aggravate.txt5
-rw-r--r--world/map/npc/magic/level1-detect-magic.txt7
-rw-r--r--world/map/npc/magic/level1-experience.txt7
-rw-r--r--world/map/npc/magic/level1-flare-dart.txt14
-rw-r--r--world/map/npc/magic/level1-grow-alizarin.txt5
-rw-r--r--world/map/npc/magic/level1-grow-cobalt.txt5
-rw-r--r--world/map/npc/magic/level1-grow-gamboge.txt5
-rw-r--r--world/map/npc/magic/level1-grow-mauve.txt5
-rw-r--r--world/map/npc/magic/level1-lesser-heal.txt7
-rw-r--r--world/map/npc/magic/level1-magic-blade.txt8
-rw-r--r--world/map/npc/magic/level1-make-sulphur.txt5
-rw-r--r--world/map/npc/magic/level1-sense-spouse.txt25
-rw-r--r--world/map/npc/magic/level1-summon-maggots.txt5
-rw-r--r--world/map/npc/magic/level1-transmute-wood.txt5
-rw-r--r--world/map/npc/magic/level2-arrow-hail.txt9
-rw-r--r--world/map/npc/magic/level2-barrier.txt6
-rw-r--r--world/map/npc/magic/level2-detect-players.txt7
-rw-r--r--world/map/npc/magic/level2-enchant-lifestone.txt5
-rw-r--r--world/map/npc/magic/level2-flying-backpack.txt6
-rw-r--r--world/map/npc/magic/level2-happy-curse.txt5
-rw-r--r--world/map/npc/magic/level2-hide.txt6
-rw-r--r--world/map/npc/magic/level2-lay-on-hands.txt5
-rw-r--r--world/map/npc/magic/level2-lightning-strike.txt10
-rw-r--r--world/map/npc/magic/level2-magic-knuckles.txt10
-rw-r--r--world/map/npc/magic/level2-make-arrows.txt5
-rw-r--r--world/map/npc/magic/level2-make-iron-powder.txt5
-rw-r--r--world/map/npc/magic/level2-make-shirt.txt5
-rw-r--r--world/map/npc/magic/level2-make-short-tanktop.txt5
-rw-r--r--world/map/npc/magic/level2-make-tanktop.txt5
-rw-r--r--world/map/npc/magic/level2-protect.txt6
-rw-r--r--world/map/npc/magic/level2-rain.txt9
-rw-r--r--world/map/npc/magic/level2-shear.txt8
-rw-r--r--world/map/npc/magic/level2-summon-fluffies.txt5
-rw-r--r--world/map/npc/magic/level2-summon-mouboo.txt5
-rw-r--r--world/map/npc/magic/level2-summon-pinkie.txt5
-rw-r--r--world/map/npc/magic/level2-summon-snakes.txt5
-rw-r--r--world/map/npc/magic/level2-summon-spiky-mushroom.txt5
-rw-r--r--world/map/npc/magic/level2-summon-wickedmushroom.txt5
-rw-r--r--world/map/npc/magic/level2-toxic-dart.txt13
-rw-r--r--world/map/npc/magic/level3-necromancy.txt3
-rw-r--r--world/map/npc/scripts.conf3
389 files changed, 2221 insertions, 4754 deletions
diff --git a/world/map/conf/magic-anchors.sex b/world/map/conf/magic-anchors.sex
deleted file mode 100644
index 3bb16f75..00000000
--- a/world/map/conf/magic-anchors.sex
+++ /dev/null
@@ -1,66 +0,0 @@
-"--------------------------------------------------------------------------------"
-" Teleport anchors(disabled) "
-" As of now, only the #vorp spell(disabled) uses them "
-"--------------------------------------------------------------------------------"
-(DISABLED
- (TELEPORT-ANCHOR tulimshar "tulimshar"
- (@+
- (@ "001-1" 43 66)
- 3
- 3)))
-
-(DISABLED
- (TELEPORT-ANCHOR hurnscald "hurnscald"
- (@+
- (@ "009-1" 55 37)
- 3
- 3)))
-
-(DISABLED
- (TELEPORT-ANCHOR nivalis "nivalis"
- (@+
- (@ "020-1" 75 63)
- 19
- 12)))
-
-(DISABLED
- (TELEPORT-ANCHOR wizardhut "##00"
- (@+
- (@ "013-1" 41 92)
- 3
- 3)))
-
-(DISABLED
- (TELEPORT-ANCHOR pachua "##01"
- (@+
- (@ "006-1" 22 101)
- 3
- 3)))
-
-(DISABLED
- (TELEPORT-ANCHOR desert "##02"
- (@+
- (@ "005-1" 160 64)
- 5
- 5)))
-
-(DISABLED
- (TELEPORT-ANCHOR forest "##03"
- (@+
- (@ "015-1" 35 35)
- 40
- 40)))
-
-(DISABLED
- (TELEPORT-ANCHOR snakecave "##04"
- (@+
- (@ "011-4" 50 75)
- 3
- 3)))
-
-(DISABLED
- (TELEPORT-ANCHOR dimondscove "##05"
- (@+
- (@ "010-2" 23 79)
- 3
- 3)))
diff --git a/world/map/conf/magic-config.sex b/world/map/conf/magic-config.sex
deleted file mode 100644
index a130becf..00000000
--- a/world/map/conf/magic-config.sex
+++ /dev/null
@@ -1,68 +0,0 @@
-"Special-purpose globals"
-(SET obscure_chance 95)
-(SET min_casttime 200)
-
-"Schools of magic"
-(CONST MAGIC 340)
-(CONST LIFE 341)
-(CONST WAR 342)
-(CONST TRANSMUTE 343)
-(CONST NATURE 344)
-(CONST ASTRAL 345)
-(CONST DARK 346)
-
-"Elements"
-(CONST ELT_NEUTRAL 0)
-(CONST ELT_WATER 1)
-(CONST ELT_EARTH 2)
-(CONST ELT_FIRE 3)
-(CONST ELT_WIND 4)
-(CONST ELT_POISON 5)
-(CONST ELT_SHADOW 6)
-(CONST ELT_HOLY 7)
-(CONST ELT_GHOST 8)
-(CONST ELT_UNDEAD 9)
-
-"Status effects"
-(CONST SC_POISON 132)
-(CONST SC_SHEARED 194) "This is the same as SC_HIDE, since mobs can't hide and shearing is only used for mobs. Feel free to fix!"
-(CONST SC_HIDE 194)
-(CONST SC_HALT_REGENERATE 195)
-(CONST SC_FLYING_BACKPACK 196)
-(CONST SC_MBARRIER 197)
-(CONST SC_HASTE 198)
-(CONST SC_PHYS_SHIELD 199)
-(CONST SO_GMHIDE 64)
-(CONST SO_GMINVISIBLE 4096)
-
-"Special effects"
-(CONST SFX_DEFAULT 10)
-(CONST SFX_SUMMON_START 21)
-(CONST SFX_SUMMON_FIRE 22)
-(CONST SFX_TELEPORT 24)
-(CONST SFX_RAIN 25)
-(CONST SFX_HIT 25)
-(CONST SFX_ARROW_HAIL 27)
-(CONST SFX_BARRIER 10)
-(CONST SFX_UNBARRIER 10)
-(CONST SFX_HEAL 3)
-(CONST SFX_LIGHTNING 18)
-
-"Magic Spell Const"
-(CONST MIN_MARRY_LEVEL 32)
-(CONST MAX_RAIN_SPELL_RADIUS 15)
-(CONST MAX_MAGIC_LEVEL 2) "Increase up to 5 as each new magic level is completed."
-(CONST MAGIC_FLAGS "MAGIC_FLAGS")
-(CONST MFLAG_MADE_CONC_POTION 16384)
-(CONST MFLAG_MADE_CONC_POTION_SHIFT 14)
-(CONST SCRIPT_XP "MAGIC_EXPERIENCE")
-(CONST SCRIPT_XP_MASK 0xffff)
-(CONST SCRIPT_XP_SHIFT 0)
-(CONST SCRIPT_LASTSPELL_MASK 0xff)
-(CONST SCRIPT_LASTSPELL_SHIFT 16)
-(CONST SCRIPT_HEALSPELL_MASK 0xff)
-(CONST SCRIPT_HEALSPELL_SHIFT 24)
-(CONST DEBUG 0)
-(CONST ATTACK_ICON_GENERIC 2000)
-(CONST ATTACK_ICON_SHEARING 2001)
-(CONST E10_FLAG_USED_FREE_WARP_SHIFT 17)
diff --git a/world/map/conf/magic-misc.sex b/world/map/conf/magic-misc.sex
deleted file mode 100644
index 14d6ea3a..00000000
--- a/world/map/conf/magic-misc.sex
+++ /dev/null
@@ -1,105 +0,0 @@
-"--------------------------------------------------------------------------------"
-" Special-purpose quasispells "
-"--------------------------------------------------------------------------------"
-
-(SPELL (NONMAGIC SILENT) marriage "marry" (PC target)
- (=>
- (GUARD
- (REQUIRE
- (||
- (is_in
- (location caster)
- (@+
- (@ "014-1" 28 39)
- 8
- 6))
- (is_in
- (location caster)
- (@+
- (@ "001-2" 21 27)
- 4
- 4)))))
- (EFFECT
- (IF (== target caster)
- (ABORT)) "no valid target or tried to marry self?"
- (IF (<
- (level caster)
- MIN_MARRY_LEVEL)
- (BLOCK
- (message caster
- (+
- (+ "You must be level " MIN_MARRY_LEVEL)
- " or higher to marry!"))
- (ABORT)))
- (IF (<
- (level target)
- MIN_MARRY_LEVEL)
- (BLOCK
- (message caster
- (+
- (+ "Your partner must be level " MIN_MARRY_LEVEL)
- " or higher to marry!"))
- (ABORT)))
- (IF (==
- (partner caster)
- target)
- (BLOCK
- (message caster
- (+
- (+ "You and "
- (name_of target))
- " are already married."))
- (ABORT)))
- (IF (is_married caster)
- (BLOCK
- (message caster "You are already married!")
- (ABORT)))
- (IF (is_married target)
- (BLOCK
- (message caster
- (+
- (name_of target)
- " is already married."))
- (ABORT)))
- (IF (!=
- (distance
- (location caster)
- (location target))
- 1)
- (BLOCK
- (message caster "You need to stand next to each other.")
- (ABORT)))
- (IF (||
- (==
- (count_item caster "WeddingRing")
- 0)
- (==
- (count_item target "WeddingRing")
- 0))
- (BLOCK
- (message caster "You must both be wearing your wedding rings!")
- (ABORT)))
- (SET script_target target)
- (SCRIPT "{
- announce @caster_name$ + \" is asking \" + strcharinfo(0) + \" for marriage.\", 2;
- mes @caster_name$ + \" wishes to marry you.\";
- mes \"Do you accept?\";
- next;
- menu
- \"Yes, I do!\", L_yes,
- \"No.\", L_Close;
-
- L_yes:
- if (marriage(@caster_name$))
- announce @caster_name$ + \" and \" + strcharinfo(0) + \" are now married!\", 0;
- goto L_Close;
-
- L_Close:
- close;
- }")
- (IF (not
- (is_married caster))
- (message caster
- (+
- (name_of target)
- " turned down your marriage offer."))))))
diff --git a/world/map/conf/magic-procedures.sex b/world/map/conf/magic-procedures.sex
deleted file mode 100644
index 0ba40bc8..00000000
--- a/world/map/conf/magic-procedures.sex
+++ /dev/null
@@ -1,340 +0,0 @@
-"Default sfx on caster"
-(PROCEDURE default_effect ()
- (sfx caster
- (+
- (- school MAGIC)
- 2)
- 0))
-
-(PROCEDURE sfx_generic (target)
- (sfx target SFX_DEFAULT 0))
-
-(PROCEDURE sfx_lightning (target)
- (sfx target SFX_LIGHTNING 0))
-
-(PROCEDURE set_var (name mask shift value)
- (set_script_variable caster name
- (|
- (&
- (script_int caster name)
- (neg
- (<< mask shift)))
- (<<
- (& value mask)
- shift))))
-
-"value is How many HP we healed"
-"gain is how many life magic experience points we can potentially gain"
-"heal_xp_value_divisor is 1 for instaheal, 2 for slow heal"
-"base_exp_factor is the factor for how many base experience points (max) the player should be allowed to gain"
-(PROCEDURE gain_heal_xp (value gain heal_xp_value_divisor base_exp_factor)
- (SET last_heal_xp
- (&
- (>>
- (script_int caster SCRIPT_XP)
- SCRIPT_HEALSPELL_SHIFT)
- SCRIPT_HEALSPELL_MASK))
- (IF (&&
- (!= target caster)
- (>
- (/ value heal_xp_value_divisor)
- (+
- (+
- (+ 10 last_heal_xp)
- (random
- (+ last_heal_xp 1)))
- (random
- (+ last_heal_xp 1)))))
- (BLOCK
- (SET heal_xp
- (+ last_heal_xp gain))
- (IF (> heal_xp SCRIPT_HEALSPELL_MASK)
- (SET heal_xp SCRIPT_HEALSPELL_MASK))
- (CALL set_var SCRIPT_XP SCRIPT_HEALSPELL_MASK SCRIPT_HEALSPELL_SHIFT heal_xp)))
- (IF (!= target caster)
- (gain_experience caster
- (* base_exp_factor
- (extract_healer_experience target value))
- 0
- 1)))
-
-(PROCEDURE gain_xp (gain index)
- "Level 4 and 5 magic users don't gain anything from spell levels 0 resp. 0+1"
- (IF (>
- (+ level 3)
- (skill caster MAGIC))
- (BLOCK
- (SET last_index
- (&
- (>>
- (script_int caster SCRIPT_XP)
- SCRIPT_LASTSPELL_SHIFT)
- SCRIPT_LASTSPELL_MASK))
- (SET last_xp
- (&
- (>>
- (script_int caster SCRIPT_XP)
- SCRIPT_XP_SHIFT)
- SCRIPT_XP_MASK))
- (IF (!= index last_index)
- (BLOCK "Some variation observed"
- (SET xp
- (+ last_xp gain))
- (IF (> xp SCRIPT_XP_MASK)
- (SET xp SCRIPT_XP_MASK))
- (CALL set_var SCRIPT_XP SCRIPT_XP_MASK SCRIPT_XP_SHIFT xp)
- (CALL set_var SCRIPT_XP SCRIPT_LASTSPELL_MASK SCRIPT_LASTSPELL_SHIFT index)
- (IF DEBUG
- (message caster
- (+ "Spell xp = " xp))))
- (IF DEBUG
- (message caster
- (+ "Re-cast same spell, xp remain at " last_xp)))))))
-
-(PROCEDURE create_item (good_item count bad_item difficulty)
- (SET success 1)
- (SET score
- (+ experience
- (random
- (min spellpower
- (+
- (/ experience 3)
- 1)))))
- (IF (>= score difficulty)
- (create_item caster good_item count)
- (BLOCK
- (SET success 0)
- (SET score
- (+
- (+ score
- (random
- (luk caster)))
- (random
- (luk caster))))
- (IF (< score
- (/ difficulty 3))
- (BLOCK
- (message caster "Your spell backfires!")
- (IF (<
- (random 110)
- (luk caster))
- (itemheal caster
- (- 0
- (*
- (*
- (+ level 1)
- (+ level 2))
- (+ 3
- (random 28))))
- 0)
- (itemheal caster
- (- 0
- (+ level 1))
- 0)))
- (IF (< score
- (/
- (* difficulty 2)
- 3))
- (BLOCK
- (IF (==
- (random 5)
- 0)
- (BLOCK
- (message caster "Your spell solidifies into the shape of a mysterious object!")
- (create_item caster "Iten" 1))
- (message caster "Your spell escapes!")))
- (BLOCK
- (message caster "Your spell takes on a mind of its own!")
- (IF (==
- (random 3)
- 0)
- (create_item caster bad_item 1))))))))
-
-"Increase spellpower by school and general magic skill"
-(PROCEDURE adjust_spellpower (school)
- (SET experience
- (&
- (>>
- (script_int caster SCRIPT_XP)
- SCRIPT_XP_SHIFT)
- SCRIPT_XP_MASK))
- (SET spellpower
- (+ spellpower
- (*
- (+
- (skill caster MAGIC)
- (skill caster school))
- 10)))
- "Below, we adjust by special items"
- (IF (&&
- (not
- (failed target))
- (||
- (== school LIFE)
- (== school NATURE)))
- (IF target
- (IF (==
- (pc target)
- (partner caster))
- (BLOCK
- (SET spellpower
- (+ spellpower 200))
- (IF (is_equipped caster "WeddingRing")
- (SET spellpower
- (+ spellpower 50)))
- (IF (is_equipped
- (pc target)
- "WeddingRing")
- (SET spellpower
- (+ spellpower 50))))))))
-
-(PROCEDURE heal (target max_heal)
- (CALL default_effect)
- (IF (!= caster target)
- (sfx target SFX_HEAL 0))
- (SET power
- (+ spellpower
- (vit caster)))
- (SET power
- (min max_heal
- (/
- (* max_heal power)
- 250)))
- (itemheal target power 0))
-
-"Goes through instaheal instead of itemheal"
-(PROCEDURE quickheal (target power)
- (CALL default_effect)
- (IF (!= caster target)
- (sfx target SFX_HEAL 0))
- (instaheal target power 0))
-
-"Can attack the target? Imports attack_range from dynamic environment"
-(PROCEDURE attack_check (target)
- (IF (not
- (line_of_sight
- (location caster)
- (location target)))
- (ABORT))
- (IF (not
- (<=
- (rdistance
- (location caster)
- (location target))
- attack_range))
- (ABORT)))
-
-"Cause elemental damage. bonus_elt grants an attack bonus, malus_elt reduces the attack. `effect' is the sfx ID."
-(PROCEDURE elt_damage (target damage dmgplus bonus_elt malus_elt effect)
- (SET d
- (+ damage
- (random dmgplus)))
- (IF (==
- (element target)
- malus_elt)
- (SET d
- (/ d 3)))
- (IF (==
- (element target)
- bonus_elt)
- (SET d
- (/
- (* d
- (+ 4
- (element_level target)))
- 4)))
- (sfx target effect 0)
- (injure caster target d 0))
-
-(PROCEDURE melee_damage (target damage dmgplus)
- (CALL attack_check target)
- (SET d
- (+ damage
- (random dmgplus)))
- (SET evade
- (+
- (level target)
- (mdef target)))
- (IF (<
- (- spellpower
- (random 100))
- evade)
- (SET d 0))
- (injure caster target d 0))
-
-(PROCEDURE install_attack_spell (charges base_delay range attack_animation)
- (CALL default_effect)
- (SET attack_range range)
- (override_attack caster charges
- (/
- (*
- (- 200
- (agi caster))
- base_delay)
- 200)
- range
- ATTACK_ICON_GENERIC
- attack_animation
- 0))
-
-(PROCEDURE install_melee_spell (charges base_delay attack_animation)
- (CALL install_attack_spell charges base_delay 1 attack_animation))
-
-(PROCEDURE summon_spell (mob_id count delay lifetime control_level school)
- (CALL default_effect)
- (sfx location SFX_SUMMON_START 0)
- (WAIT delay)
- (sfx location SFX_SUMMON_FIRE 0)
- (spawn
- (rbox location 2)
- caster
- mob_id
- (if_then_else
- (>=
- (skill caster school)
- control_level)
- 2
- 1)
- count
- lifetime)) "pets when level is high enough"
-
-(PROCEDURE abort_on_area_shield (pos)
- (IF (&&
- (==
- (is_exterior pos)
- 1)
- (||
- (||
- (==
- (map_nr pos)
- 1)
- (==
- (map_nr pos)
- 9))
- (==
- (map_nr pos)
- 20)))
- (BLOCK "1 is Tulimshar, 9 is Hurnscald and 20 is Nivalis"
- (message caster "A powerful magic drains your spell just as it is beginning to take shape!")
- (ABORT))))
-
-(PROCEDURE script_split_str (d str v m)
- (FOR a 0 m
- (BLOCK
- (IF (< (strlen str) 1) (BREAK))
- (SET arglen (strlen str))
- (SET argoffset
- (if_then_else
- (contains_string str d)
- (strstr str d)
- arglen))
- (SET arg
- (if_then_else (== arglen argoffset)
- str
- (substr str 0 argoffset)))
- (set_script_str caster (+ (+ "@" v) (+ a "$")) arg)
- (SET str
- (if_then_else
- (> arglen (- argoffset 1))
- (substr str (+ argoffset 1) arglen)
- "")))))
diff --git a/world/map/conf/magic-quickdebug.sex b/world/map/conf/magic-quickdebug.sex
deleted file mode 100644
index 1b5f582c..00000000
--- a/world/map/conf/magic-quickdebug.sex
+++ /dev/null
@@ -1,10 +0,0 @@
-"--------------------------------------------------------------------------------"
-"Quickdebug Spells"
-"--------------------------------------------------------------------------------"
-(SPELL (NONMAGIC SILENT) debug0 "#debug" ()
- (EFFECT
- (SCRIPT "{if(!debug&&(getgmlevel()<99))end;callfunc \"Debug\";}")))
-
-(SPELL (NONMAGIC SILENT) debug1 "#numa" ()
- (EFFECT
- (SCRIPT "{if(!debug&&(getgmlevel()<99))end;callfunc \"SuperDebug\";}")))
diff --git a/world/map/db/item_db_head.txt b/world/map/db/item_db_head.txt
index 9cd56c4e..9faaf4c2 100644
--- a/world/map/db/item_db_head.txt
+++ b/world/map/db/item_db_head.txt
@@ -63,7 +63,7 @@
885, GreenEggshellHat, 5, 7000, 5000, 15, 0, 9, 0, 3, 0, 2, 256, 0, 1, 0, {}, {}
886, OrangeEggshellHat, 5, 7000, 5000, 15, 0, 9, 0, 3, 0, 2, 256, 0, 1, 0, {}, {}
887, DarkEggshellHat, 5, 7000, 5000, 15, 0, 9, 0, 3, 0, 2, 256, 0, 1, 0, {}, {}
-888, MagicGMTopHat, 5, 4200, 1900, 30, 0, 60, 0, 20, 0, 2, 256, 0, 0, 0, {}, {set @minLvl, 60; callfunc "RestrictedItem"; bonus bMaxHP, 31000; bonus bFlee, -200; bonus bHPrecovRate, -400; bonus bCriticalDef, 250; bonus bMdef, 89;}
+888, MagicGMTopHat, 5, 4200, 1900, 30, 0, 60, 0, 20, 0, 2, 256, 0, 0, 0, {}, {set @minLvl, get(.killthegm, "GM"); callfunc "RestrictedItem"; bonus bMaxHP, 31000; bonus bFlee, -200; bonus bHPrecovRate, -400; bonus bCriticalDef, 250; bonus bMdef, 89;}
889, MurdererCrown, 5, 75000, 12000, 240, 0, 4, 0, 0, 0, 2, 256, 0, 0, 0, {}, {}
890, BeanieCopter, 5, 8000, 2000, 20, 0, 4, 0, 2, 0, 2, 256, 0, 0, 0, {}, {}
897, RedRoseHat, 5, 5000, 1000, 0, 0, 1, 0, 8, 0, 2, 256, 0, 0, 0, {}, {}
diff --git a/world/map/db/params.txt b/world/map/db/params.txt
index b10a4dce..2bf45896 100644
--- a/world/map/db/params.txt
+++ b/world/map/db/params.txt
@@ -43,6 +43,8 @@ JOBLEVEL 55 1
PARTNER 57 1
GM 500 1
ATTACKRANGE 1000 1
+ELTLVL 1001 1
+ELTTYPE 1002 1
BASE_ATK 1014 1
POS_X 1074 1
POS_Y 1075 1
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-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-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 e936447e..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;
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 1367e6f7..e323293e 100644
--- a/world/map/npc/002-2/stranger.txt
+++ b/world/map/npc/002-2/stranger.txt
@@ -154,8 +154,8 @@ L_Towel:
mes "\"What is the most important item for every hitchhiker to have?\"";
mes "";
mes "##BDrag & drop the item from your inventory##b.";
- requestitem @answer$;
- if (@answer$ != "Towel" && @answer$ != "HitchhikersTowel")
+ 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-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 f5fcda32..3e80dccc 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 >= get(.valia, "GM") || 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:
@@ -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/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-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-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-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/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-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-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-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-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-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-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-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 e5a2ec04..188ef2e0 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 < get(.lounge, "GM") && 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 < get(.lounge, "GM") && 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 < get(.lounge, "GM") && 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 < get(.lounge, "GM") && GM < G_SYSOP && !debug) end;
gmlog "@warp 017-9";
warp "017-9", 31, 21;
end;
@@ -32,25 +32,8 @@
029-1,34,96,0|script|#SecretDoor5|32767,0,0
{
- if (getgmlevel() < 20 && !debug) end;
+ if (GM < get(.lounge, "GM") && 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;
-}
-
--|script|Numa Spell|32767
-{
- callfunc "SuperDebug";
- end;
-
-OnInit:
- registercmd "@numa", "Numa Spell";
- 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-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-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/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-2/_import.txt b/world/map/npc/029-2/_import.txt
index 6d67f2f7..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
@@ -14,4 +16,3 @@ npc: npc/029-2/sorfina.txt
npc: npc/029-2/stat_reset.txt
npc: npc/029-2/tanisha.txt
npc: npc/029-2/two_arms.txt
-npc: npc/029-2/alchemy.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
index d0d2909a..3d49d5ae 100644
--- a/world/map/npc/029-2/alchemy.txt
+++ b/world/map/npc/029-2/alchemy.txt
@@ -1,11 +1,16 @@
-029-2,113,57,0|script|#alchemylab|400
+-|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] == "")
@@ -35,13 +40,13 @@ L_Proceed:
L_CheckRecipes:
set .@n, .@n+3;
- if (.@n == get(.rsize, "#alchemylab"))
+ if (.@n == get(.rsize, "_N-Alchemy"))
goto L_Failed;
- if (!(get(.recipes$[.@n], "#alchemylab") == @alchlab_items$[0] && get(.recipes$[.@n+1], "#alchemylab") == @alchlab_items$[1]) &&
- !(get(.recipes$[.@n], "#alchemylab") == @alchlab_items$[1] && get(.recipes$[.@n+1], "#alchemylab") == @alchlab_items$[0]))
+ 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], "#alchemylab"), 1; // XXX: here we could also make it fail sometimes depending on your expertise
+ 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;
@@ -50,7 +55,7 @@ L_CheckRecipes:
mes " ["+ getitemlink(@alchlab_items$[1]) +"]";
mes;
mes "You obtained:";
- mes " ["+ getitemlink(get(.recipes$[.@n+2], "#alchemylab")) +"]";
+ mes " ["+ getitemlink(get(.recipes$[.@n+2], "_N-Alchemy")) +"]";
close;
L_NoItems:
@@ -64,15 +69,30 @@ L_Failed:
L_Abort:
close;
-OnInit:
- void // the first alchemy lab doesn't need a puppet, it's already on a map
- puppet("027-2", 51, 100, strnpcinfo(0)+0, 400), // TODO: make a npc like npc 400 but with hoverCursor="action" => looks better for things like crafting
- puppet("001-2", 92, 76, strnpcinfo(0)+1, 400),
- puppet("001-2", 98, 76, strnpcinfo(0)+2, 400),
- puppet("001-2", 92, 89, strnpcinfo(0)+3, 400),
- puppet("001-2", 98, 89, strnpcinfo(0)+4, 400);
+S_Spawn:
+ set .@s, getarraysize(.x1);
+ if (.spawned == 0)
+ set .spawned, 1; // FIXME: in tmwa (getarraysize2, setarray) allow to set array index 0 when setting in another npc
+ 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;
- setarray .recipes$[0],
+L_InitVars:
+ setarray .recipes$[0], 0,
"DilutedConcentrationPot", "DarkConcentrationPotion", "ConcentrationPotion",
"CactusDrink", "CactusDrink", "CactusPotion",
"PinkPetal", "BottleOfWater", "ConcentrationPotion";
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/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/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/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/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/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-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/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..64b145c8 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,122 @@ 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; // switch npc id to 1063
end;
+L_Destroy:
+ 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
+ set .i, .i, .@p; // tell the puppet what object contains it
+ set .@timer, if_then_else(.done_initial[.i], rand(.death_t/2, .death_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, 1; // 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, 40000; // rand(timer/2, timer) before a node appears
+ 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/README.md b/world/map/npc/commands/README.md
deleted file mode 100644
index b1f3c401..00000000
--- a/world/map/npc/commands/README.md
+++ /dev/null
@@ -1,140 +0,0 @@
-# Commands To-do
-- [ ] help
-- [ ] setup
-- [ ] charwarp
-- [ ] warp
-- [ ] where
-- [ ] goto
-- [ ] npc
-- [ ] jump
-- [ ] who
-- [ ] whogroup
-- [ ] whomap
-- [ ] whomapgroup
-- [ ] whogm
-- [ ] save
-- [ ] return
-- [ ] load
-- [ ] speed
-- [ ] storage
-- [ ] option
-- [ ] hide
-- [ ] die
-- [ ] kill
-- [ ] alive
-- [ ] kami
-- [ ] heal
-- [ ] item
-- [ ] itemreset
-- [ ] itemcheck
-- [ ] blvl
-- [ ] jlvl
-- [ ] pvpoff
-- [ ] exprate
-- [ ] pvpon
-- [ ] model
-- [ ] spawn
-- [ ] killmonster
-- [ ] killmonster2
-- [ ] gat
-- [ ] packet
-- [ ] stpoint
-- [ ] skpoint
-- [X] zeny
-- [ ] str
-- [ ] agi
-- [ ] vit
-- [ ] int
-- [ ] dex
-- [ ] luk
-- [ ] recall
-- [ ] revive
-- [ ] charstats
-- [ ] charstatsall
-- [ ] charoption
-- [ ] charsave
-- [ ] doom
-- [ ] doommap
-- [ ] raise
-- [ ] raisemap
-- [ ] charbaselvl
-- [ ] charjlvl
-- [ ] kick
-- [ ] kickall
-- [ ] questskill
-- [ ] charquestskill
-- [ ] lostskill
-- [ ] charlostskill
-- [ ] party
-- [ ] mapexit
-- [ ] idsearch
-- [ ] mapmove
-- [ ] broadcast
-- [ ] localbroadcast
-- [ ] recallall
-- [ ] charskreset
-- [ ] charstreset
-- [ ] charreset
-- [ ] charmodel
-- [ ] charskpoint
-- [ ] charstpoint
-- [X] charzeny
-- [ ] mapinfo
-- [ ] dye
-- [ ] ccolor
-- [ ] hairstyle
-- [ ] haircolor
-- [ ] allstats
-- [ ] charchangesex
-- [ ] block
-- [ ] unblock
-- [ ] ban
-- [ ] unban
-- [ ] partyspy
-- [ ] partyrecall
-- [ ] enablenpc
-- [ ] disablenpc
-- [ ] servertime
-- [ ] chardelitem
-- [ ] listnearby
-- [ ] email
-- [ ] effect
-- [ ] charitemlist
-- [ ] charstoragelist
-- [ ] addwarp
-- [ ] pvp
-- [ ] npcmove
-- [ ] charpvp
-- [ ] chareffect
-- [ ] dropall
-- [ ] chardropall
-- [ ] storeall
-- [ ] charstoreall
-- [ ] rain
-- [ ] snow
-- [ ] sakura
-- [ ] fog
-- [ ] leaves
-- [ ] summon
-- [ ] adjgmlvl
-- [ ] adjcmdlvl
-- [ ] trade
-- [ ] charwipe
-- [ ] setmagic
-- [ ] magicinfo
-- [ ] log
-- [ ] l
-- [ ] tee
-- [ ] t
-- [ ] invisible
-- [ ] visible
-- [ ] hugo
-- [ ] linus
-- [ ] sp-info
-- [ ] sp-focus
-- [ ] sp-unfocus
-- [ ] skill-learn
-- [ ] wgm
-- [ ] ipcheck
-- [ ] doomspot
-- [ ] source
diff --git a/world/map/npc/commands/_atcommand_local.txt.example b/world/map/npc/commands/_atcommand_local.txt.example
index a195d580..ec1fae51 100644
--- a/world/map/npc/commands/_atcommand_local.txt.example
+++ b/world/map/npc/commands/_atcommand_local.txt.example
@@ -3,10 +3,25 @@
end;
OnInit:
- // define permissions here
+ // command permissions here
set .zeny, G_ADMIN;
+ set .charzeny, G_SYSOP;
+ set .debug, G_ADMIN;
+ set .changesex, G_DEV;
+ set .charchangesex, G_GM;
+ set .class, G_DEV;
+ set .charclass, G_EVENT;
+
+ // special permissions below
+ set .lounge, G_TESTER; // level to enter the GM Lounge & talk to Numa
+ set .killthegm, G_EVENT; // this is both for the event and the magic gm top hat
+ set .holiday, G_DEV; // holiday debug (xmas, halloween, ...)
+ set .event, G_EVENT; // event debug (open portals, disguise, ...)
+ set .scheduled, G_DEV; // scheduled broadcasts (schedule broadcast, stop broadcast, trigger broadcast, ...)
+ set .motd, G_DEV; // motd debug (show/hide motd)
+
+ // very specific debug menus
+ set .valia, G_DEV; // illia quest debug info
- // permissions for events
- set .killthegm, G_EVENT;
end;
}
diff --git a/world/map/npc/commands/_import.txt b/world/map/npc/commands/_import.txt
index 7efe4111..c0630138 100644
--- a/world/map/npc/commands/_import.txt
+++ b/world/map/npc/commands/_import.txt
@@ -2,3 +2,8 @@ npc: npc/commands/_procedures.txt
npc: npc/commands/_atcommand_local.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
diff --git a/world/map/npc/commands/_procedures.txt b/world/map/npc/commands/_procedures.txt
index 77c1c7e9..732b496f 100644
--- a/world/map/npc/commands/_procedures.txt
+++ b/world/map/npc/commands/_procedures.txt
@@ -1,5 +1,5 @@
// ARGV Splitter
-// takes @args$ and splits it properly so that '@cmd "foo bar" baz' is ['foo bar','baz'] instead of ['foo','bar','baz']
+// 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
diff --git a/world/map/npc/commands/changesex.txt b/world/map/npc/commands/changesex.txt
new file mode 100644
index 00000000..ba08783d
--- /dev/null
+++ b/world/map/npc/commands/changesex.txt
@@ -0,0 +1,34 @@
+-|script|@changesex|32767
+{
+ callfunc "argv_splitter";
+ set .@n$, if_then_else(@argv$[1] != "", "char", "") + "changesex";
+ if (GM < get(.changesex, "GM") && 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 < get(.charchangesex, "GM") && 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;
+ goto L_Success;
+
+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_Success:
+ gmlog "@"+.@n$+" " + @args$;
+ message strcharinfo(0), .@n$+" : The operation succeeded.";
+ end;
+
+L_GM:
+ message strcharinfo(0), .@n$+" : GM command is level "+ get(if_then_else(@argv$[1] != "", .charchangesex, .changesex), "GM") +", 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..f9275591
--- /dev/null
+++ b/world/map/npc/commands/class.txt
@@ -0,0 +1,33 @@
+-|script|@class|32767
+{
+ callfunc "argv_splitter";
+ set .@n$, if_then_else(@argv$[1] != "", "char", "") + "class";
+ if (GM < get(.class, "GM") && 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 < get(.charclass, "GM") && GM < G_SYSOP) goto L_GM; // when target is not self, use charclass permission
+ set .@c, 1; // default to human
+ if (@argv[0] >= 0 || @argv[0] <= 32767) set .@c, @argv[0];
+ set Class, .@c, .@target_id;
+ goto L_Success;
+
+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_Success:
+ gmlog "@"+.@n$+" " + @args$;
+ message strcharinfo(0), .@n$+" : The operation succeeded.";
+ end;
+
+L_GM:
+ message strcharinfo(0), .@n$+" : GM command is level "+ get(if_then_else(@argv$[1] != "", .charclass, .class), "GM") +", 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 556e501b..7b653b26 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#debug##0";
+ mes "%%E ##a@debug##0";
set @debug_npc, 0;
goto L_Close;
@@ -924,11 +924,15 @@ L_Close:
-|script|Debug Spell|32767
{
- if(!debug && getgmlevel() < 99) end;
+ if(!debug && getgmlevel() < get(.debug, "GM")) 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;
}
diff --git a/world/map/npc/commands/numa.txt b/world/map/npc/commands/numa.txt
new file mode 100644
index 00000000..4184743b
--- /dev/null
+++ b/world/map/npc/commands/numa.txt
@@ -0,0 +1,132 @@
+// all-in-one debug
+// author: meko
+
+-|script|SuperDebug|32767
+{
+ if (GM < get(.lounge, "GM") && 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 "+ get(.lounge, "GM") +", 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 < get(.holiday, "GM") && 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 < get(.event, "GM") && GM < G_EVENT) goto L_GM;
+ gmlog strcharinfo(0) + " accessed the GM event debug.";
+ callfunc "GmDebug";
+ goto L_Close;
+
+L_StoneBoard:
+ if (GM < get(.scheduled, "GM") && GM < G_SYSOP) goto L_GM;
+ callfunc "SBConfig";
+ goto L_Close;
+
+L_MOTD:
+ if (GM < get(.motd, "GM") && 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 dfd114d2..3994b795 100644
--- a/world/map/npc/items/magic_gm_top_hat.txt
+++ b/world/map/npc/commands/pullrabbit.txt
@@ -1,4 +1,4 @@
--|script|ActivateMagicGMTophat|32767
+-|script|@pullrabbit|32767
{
if (GM < get(.killthegm, "GM") && GM < G_SYSOP) end;
if (getequipid(equip_head) != 888) end;
@@ -20,6 +20,6 @@ L_Inventory:
end;
OnInit:
- registercmd "#pullrabbit", strnpcinfo(0);
+ registercmd chr(ATCMD_SYMBOL) + "pullrabbit", strnpcinfo(0);
end;
}
diff --git a/world/map/npc/commands/zeny.txt b/world/map/npc/commands/zeny.txt
index 9215637a..94c02c4b 100644
--- a/world/map/npc/commands/zeny.txt
+++ b/world/map/npc/commands/zeny.txt
@@ -1,10 +1,12 @@
-|script|@zeny|32767
{
- if (GM < get(.zeny, "GM") && GM < G_SYSOP) goto L_GM;
callfunc "argv_splitter";
+ set .@n$, if_then_else(@argv$[1] != "", "char", "") + "zeny";
+ if (GM < get(.zeny, "GM") && 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 < get(.charzeny, "GM") && 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;
@@ -51,21 +53,21 @@ L_MaybeRemoveBank:
L_OutOfBounds:
// XXX: maybe we could also take from other chars from the same accout?
- message strcharinfo(0), "zeny : Impossible to proceed! This would cause the player to have less than 0 zeny or more than " + .max_int + ".";
+ 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), "zeny : Impossible to attach to the target player.";
+ 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), "zeny : The operation succeeded.";
+ message strcharinfo(0), .@n$+" : The operation succeeded.";
end;
L_GM:
- message strcharinfo(0), "zeny : GM command is level "+ get(.zeny, "GM") +", but you are level " + GM;
+ message strcharinfo(0), .@n$+" : GM command is level "+ get(if_then_else(@argv$[1] != "", .charzeny, .zeny), "GM") +", but you are level " + GM;
end;
OnInit:
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 d898b436..316ee03f 100644
--- a/world/map/npc/functions/game_rules.txt
+++ b/world/map/npc/functions/game_rules.txt
@@ -2,7 +2,10 @@
function|script|GameRules
{
- requestlang .@cl$;
+ 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;
@@ -17,7 +20,6 @@ function|script|GameRules
if (.@l$[0] == "zh") goto L_zhHant;
if (.@l$[0] == "ru") goto L_Russian;
- mes "[Game Rules]";
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 e4247d18..4d453c83 100644
--- a/world/map/npc/functions/global_event_handler.txt
+++ b/world/map/npc/functions/global_event_handler.txt
@@ -21,14 +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/superdebug.txt b/world/map/npc/functions/superdebug.txt
deleted file mode 100644
index 140e703a..00000000
--- a/world/map/npc/functions/superdebug.txt
+++ /dev/null
@@ -1,69 +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";
- goto L_Close;
-
-L_HalloweenDebug:
- gmlog strcharinfo(0) + " accessed the Halloween debug.";
- callfunc "HalloweenDebug";
- goto L_Close;
-
-L_Event:
- if(getgmlevel() < 60) goto L_GM;
- gmlog strcharinfo(0) + " accessed the GM event debug.";
- callfunc "GmDebug";
- goto L_Close;
-
-L_StoneBoard:
- if (getgmlevel() < 30) goto L_GM;
- callfunc "SBConfig";
- goto L_Close;
-
-L_MOTD:
- if (getgmlevel() < 40) goto L_GM;
- callfunc "MOTDConfig";
- goto L_Close;
-
-L_GM:
- mes "[Numa]";
- mes "I'm awfully sorry.";
- mes "You do not have the required GM level to perform this action.";
- goto L_Close;
-
-L_Close:
- close2; // FIXME: replace with npc action 5
- return;
-}
diff --git a/world/map/npc/magic/README.md b/world/map/npc/magic/README.md
index 187c7c04..57ab5131 100644
--- a/world/map/npc/magic/README.md
+++ b/world/map/npc/magic/README.md
@@ -1,23 +1,3 @@
-# To-do
-- [X] finish the missing spells and push them so they can be tested
-- [ ] Deal with the removal of the following spells from magic to NPCs or Commands
- - [X] Ched
- - [X] merge-concentration-potions
- - [ ] Auldsbel
- - [ ] make-short-tanktop
- - [ ] make-tanktop
- - [ ] make-shirt
- - [ ] make-concentration-potion
- - [X] Wyara
- - [ ] sense-spouse
-
----
----
-to see other things that needs to be done do a grep for `TODO`, `FIXME` in this folder.
-To see a list of things that needs further thoughts do a grep for `XXX`.
-
----
----
- [ ] 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?)
@@ -49,6 +29,8 @@ To see a list of things that needs further thoughts do a grep for `XXX`.
- [ ] `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
diff --git a/world/map/npc/magic/_import.txt b/world/map/npc/magic/_import.txt
index 52a6a55c..2ef595af 100644
--- a/world/map/npc/magic/_import.txt
+++ b/world/map/npc/magic/_import.txt
@@ -12,6 +12,7 @@ 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
diff --git a/world/map/npc/magic/_procedures.txt b/world/map/npc/magic/_procedures.txt
index 57a83fa9..df750f73 100644
--- a/world/map/npc/magic/_procedures.txt
+++ b/world/map/npc/magic/_procedures.txt
@@ -1,6 +1,6 @@
function|script|magic_register
{
- debugmes ">> Register " + .invocation$ + " @ " + strnpcinfo(0);
+ //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;
@@ -8,12 +8,21 @@ function|script|magic_register
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((gettimetick(2) - MAGIC_CAST_TICK) < 0) set .@r, 2; // check if last debuff ended
+ if(@_M_BLOCK) set .@r, 2; // check if last debuff ended
if(Hp < 1) set .@r, 3; // can not cast when dead
return .@r;
}
@@ -22,10 +31,10 @@ function|script|elt_damage
{
// args are damage, dmgplus(mutation), bonus_elt, malus_elt, effect
set .@dmg, getarg(0) + rand(getarg(1));
- if(elttype(@target_id) == getarg(3)) // malus
+ if(get(ELTTYPE, @target_id) == getarg(3)) // malus
set .@dmg, .@dmg / 3;
- if(elttype(@target_id) == getarg(2)) // bonus
- set .@dmg, ((eltlvl(@target_id) + 4) * .@dmg) / 4;
+ 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);
diff --git a/world/map/npc/magic/level0-wand.txt b/world/map/npc/magic/level0-wand.txt
index f0938713..1a512c0c 100644
--- a/world/map/npc/magic/level0-wand.txt
+++ b/world/map/npc/magic/level0-wand.txt
@@ -5,10 +5,12 @@
if(@WandAttack != 1) goto L_Failed;
// here we install
- set MAGIC_CAST_TICK, gettimetick(2) + 5; // set the new debuff
+ 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);
- overrideattack (@Wand + (@spellpower / 10)), 1200, 3, ATTACK_ICON_GENERIC, @WandID, strnpcinfo(0)+"::OnAttack";
+ set .@delay, (((200 - Agi) * 1200) / 200);
+ overrideattack (@Wand + (@spellpower / 10)), .@delay, 3, ATTACK_ICON_GENERIC, @WandID, strnpcinfo(0)+"::OnAttack";
callfunc "magic_exp";
end;
@@ -62,9 +64,9 @@ L_Failed:
end;
OnInit:
- setarray .Wands[0], 758, 1171;
- setarray .WandsPwr[0], 2, 1;
- setarray .WandsAnim[0], 35, 33;
+ 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");
diff --git a/world/map/npc/magic/level1-aggravate.txt b/world/map/npc/magic/level1-aggravate.txt
index 1aaa9fc7..5b3d5674 100644
--- a/world/map/npc/magic/level1-aggravate.txt
+++ b/world/map/npc/magic/level1-aggravate.txt
@@ -1,9 +1,10 @@
-|script|spell-aggravate|32767
{
- if(call("magic_checks")) end; // << I wish we had functions that could return >>
+ if(call("magic_checks")) end;
if (Sp < 3) end;
if (getskilllv(.school) < .level) end;
- set MAGIC_CAST_TICK, gettimetick(2) + 1; // set the new debuff
+ 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;
diff --git a/world/map/npc/magic/level1-detect-magic.txt b/world/map/npc/magic/level1-detect-magic.txt
index e64a499a..e975e952 100644
--- a/world/map/npc/magic/level1-detect-magic.txt
+++ b/world/map/npc/magic/level1-detect-magic.txt
@@ -1,9 +1,10 @@
-|script|detect-magic|32767
{
- if(call("magic_checks")) end; // << I wish we had functions that could return >>
+ if(call("magic_checks")) end;
if (Sp < 3) end;
if (getskilllv(.school) < .level) end;
- set MAGIC_CAST_TICK, gettimetick(2) + 6; // set the new debuff
+ 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);
@@ -15,7 +16,7 @@
OnNearbyNpc:
set .@e$, strnpcinfo(2,@target_id);
- if(.@e$ == "#_M" || .@e$ == "#MAGIC")
+ if(.@e$ == "#_M" || .@e$ == "#MAGIC" || get(.IS_MAGIC, @target_id))
misceffect FX_MAGIC_DEFAULT, @target_id;
end;
diff --git a/world/map/npc/magic/level1-experience.txt b/world/map/npc/magic/level1-experience.txt
index 2c283eaa..36ad8179 100644
--- a/world/map/npc/magic/level1-experience.txt
+++ b/world/map/npc/magic/level1-experience.txt
@@ -1,8 +1,9 @@
-|script|spell-experience|32767
{
- if(call("magic_checks")) end; // << I wish we had functions that could return >>
+ if(call("magic_checks")) end;
if (Sp < 1) end;
- set MAGIC_CAST_TICK, gettimetick(2) + 1; // set the new debuff
+ 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";
@@ -35,6 +36,6 @@ OnInit:
set .level, 1;
set .exp_gain, 0;
void call("magic_register");
- setarray .MAX_MAGIC_EXP[0], 0, 100, 1200, 8000, 40000, 65535;
+ 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
index 6b6657b6..29a4f3c1 100644
--- a/world/map/npc/magic/level1-flare-dart.txt
+++ b/world/map/npc/magic/level1-flare-dart.txt
@@ -1,25 +1,27 @@
-|script|flare-dart|32767
{
- if(call("magic_checks")) end; // << I wish we had functions that could return >>
+ if(call("magic_checks")) end;
if (Sp < 10) end;
set @level, getskilllv(.school);
if (@level < .level) end;
if (@level <= 2 && countitem("SulphurPowder") >= 1) delitem "SulphurPowder", 1;
elif (@level <= 2) end;
- set MAGIC_CAST_TICK, gettimetick(2) + 1; // set the new debuff
+ 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);
- set @damage, sqrt(@spellpower) * 5;
- set @dmg_bonus, (BaseLevel/3) + 5;
- overrideattack (@spellpower/50)+3, 1200, 4, ATTACK_ICON_GENERIC, 34, strnpcinfo(0)+"::OnAttack";
+ set @flar_damage, sqrt(@spellpower) * 5;
+ set @flar_dmg_bonus, (BaseLevel/3) + 5;
+ set .@delay, (((200 - Agi) * 1200) / 200);
+ overrideattack (@spellpower/50)+3, .@delay, 4, ATTACK_ICON_GENERIC, 34, strnpcinfo(0)+"::OnAttack";
callfunc "magic_exp";
end;
OnAttack:
misceffect FX_MAGIC_BLACK, strcharinfo(0);
if (target(BL_ID, @target_id, 50) != 50) end; // 0x20 | 0x02 | 0x10
- void call("elt_damage", @damage, @dmg_bonus, ELT_WATER, ELT_FIRE, FX_MAGIC_BLACK);
+ void call("elt_damage", @flar_damage, @flar_dmg_bonus, ELT_WATER, ELT_FIRE, FX_MAGIC_BLACK);
end;
OnInit:
diff --git a/world/map/npc/magic/level1-grow-alizarin.txt b/world/map/npc/magic/level1-grow-alizarin.txt
index c44a4f47..bc88380d 100644
--- a/world/map/npc/magic/level1-grow-alizarin.txt
+++ b/world/map/npc/magic/level1-grow-alizarin.txt
@@ -1,12 +1,13 @@
-|script|grow-alizarin|32767
{
- if(call("magic_checks")) end; // << I wish we had functions that could return >>
+ if(call("magic_checks")) end;
if (Sp < 4) end;
if (getskilllv(.school) < .level) end;
if (countitem("AlizarinHerb") < 1 || countitem("Root") < 1) end;
delitem "AlizarinHerb", 1;
delitem "Root", 1;
- set MAGIC_CAST_TICK, gettimetick(2) + 2; // set the new debuff
+ 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);
diff --git a/world/map/npc/magic/level1-grow-cobalt.txt b/world/map/npc/magic/level1-grow-cobalt.txt
index 1eb923b2..cc7d1b33 100644
--- a/world/map/npc/magic/level1-grow-cobalt.txt
+++ b/world/map/npc/magic/level1-grow-cobalt.txt
@@ -1,12 +1,13 @@
-|script|grow-cobalt|32767
{
- if(call("magic_checks")) end; // << I wish we had functions that could return >>
+ if(call("magic_checks")) end;
if (Sp < 4) end;
if (getskilllv(.school) < .level) end;
if (countitem("CobaltHerb") < 1 || countitem("Root") < 1) end;
delitem "CobaltHerb", 1;
delitem "Root", 1;
- set MAGIC_CAST_TICK, gettimetick(2) + 2; // set the new debuff
+ 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);
diff --git a/world/map/npc/magic/level1-grow-gamboge.txt b/world/map/npc/magic/level1-grow-gamboge.txt
index 4ac779a8..559c99e8 100644
--- a/world/map/npc/magic/level1-grow-gamboge.txt
+++ b/world/map/npc/magic/level1-grow-gamboge.txt
@@ -1,12 +1,13 @@
-|script|grow-gamboge|32767
{
- if(call("magic_checks")) end; // << I wish we had functions that could return >>
+ if(call("magic_checks")) end;
if (Sp < 4) end;
if (getskilllv(.school) < .level) end;
if (countitem("GambogeHerb") < 1 || countitem("Root") < 1) end;
delitem "GambogeHerb", 1;
delitem "Root", 1;
- set MAGIC_CAST_TICK, gettimetick(2) + 2; // set the new debuff
+ 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);
diff --git a/world/map/npc/magic/level1-grow-mauve.txt b/world/map/npc/magic/level1-grow-mauve.txt
index 1744660a..5ae266e2 100644
--- a/world/map/npc/magic/level1-grow-mauve.txt
+++ b/world/map/npc/magic/level1-grow-mauve.txt
@@ -1,12 +1,13 @@
-|script|grow-mauve|32767
{
- if(call("magic_checks")) end; // << I wish we had functions that could return >>
+ if(call("magic_checks")) end;
if (Sp < 4) end;
if (getskilllv(.school) < .level) end;
if (countitem("MauveHerb") < 1 || countitem("Root") < 1) end;
delitem "MauveHerb", 1;
delitem "Root", 1;
- set MAGIC_CAST_TICK, gettimetick(2) + 2; // set the new debuff
+ 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);
diff --git a/world/map/npc/magic/level1-lesser-heal.txt b/world/map/npc/magic/level1-lesser-heal.txt
index c4c74dd7..17f48b95 100644
--- a/world/map/npc/magic/level1-lesser-heal.txt
+++ b/world/map/npc/magic/level1-lesser-heal.txt
@@ -1,8 +1,7 @@
-|script|lesser-heal|32767
{
- if(call("magic_checks")) end; // << I wish we had functions that could return >>
+ if(call("magic_checks")) end;
if (Sp < 6) end;
- set MAGIC_CAST_TICK, gettimetick(2) + 1; // set the new debuff
if (getskilllv(.school) < .level) end;
set @target_id, getcharid(3, @args$);
if (@target_id < 1 || !(isloggedin(@target_id))) set @target_id, BL_ID; // fallback to self
@@ -11,6 +10,8 @@
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;
@@ -32,7 +33,7 @@ L_NotMe:
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, 1, 1;
+ if (!(isdead())) heal 200, 0, 1;
end;
L_Mouboo:
diff --git a/world/map/npc/magic/level1-magic-blade.txt b/world/map/npc/magic/level1-magic-blade.txt
index 915cb018..954675fe 100644
--- a/world/map/npc/magic/level1-magic-blade.txt
+++ b/world/map/npc/magic/level1-magic-blade.txt
@@ -1,6 +1,6 @@
-|script|magic-blade|32767
{
- if(call("magic_checks")) end; // << I wish we had functions that could return >>
+ if(call("magic_checks")) end;
if (Sp < 9) end;
set .@level, getskilllv(.school);
if (.@level < .level) end;
@@ -9,11 +9,13 @@
elif (.@level <= 2 && countitem("Knife") >= 1) set @chiza_component$, "Knife";
elif (.@level <= 2) end;
if (@chiza_component$ != "") delitem @chiza_component$, 1;
- set MAGIC_CAST_TICK, gettimetick(2) + 1; // set the new debuff
+ 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);
- overrideattack (@spellpower/15)+10, 1200, 1, ATTACK_ICON_GENERIC, 30, strnpcinfo(0)+"::OnAttack";
+ set .@delay, (((200 - Agi) * 1200) / 200);
+ overrideattack (@spellpower/15)+10, .@delay, 1, ATTACK_ICON_GENERIC, 30, strnpcinfo(0)+"::OnAttack";
callfunc "magic_exp";
set @chiza_str, Str; // do not allow to equip light armor, cast, and then switch to heavy armor to get bonus str
end;
diff --git a/world/map/npc/magic/level1-make-sulphur.txt b/world/map/npc/magic/level1-make-sulphur.txt
index fe175265..a181d057 100644
--- a/world/map/npc/magic/level1-make-sulphur.txt
+++ b/world/map/npc/magic/level1-make-sulphur.txt
@@ -1,10 +1,11 @@
-|script|make-sulphur|32767
{
- if(call("magic_checks")) end; // << I wish we had functions that could return >>
+ if(call("magic_checks")) end;
if (Sp < 4) end;
if (getskilllv(.school) < .level) end;
if (countitem("PileOfAsh") >= 1) delitem "PileOfAsh", 1; else end;
- set MAGIC_CAST_TICK, gettimetick(2) + 4; // set the new debuff
+ 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);
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
index 9247e56c..5daddd8a 100644
--- a/world/map/npc/magic/level1-summon-maggots.txt
+++ b/world/map/npc/magic/level1-summon-maggots.txt
@@ -3,13 +3,14 @@
end;
OnCast:
- if(call("magic_checks")) end; // << I wish we had functions that could return >>
+ if(call("magic_checks")) end;
if (Sp < 21) end;
if (getskilllv(.school) < .level) end;
if (countitem("MaggotSlime") < 1 || countitem("Root") < 1) end;
delitem "MaggotSlime", 1;
delitem "Root", 1;
- set MAGIC_CAST_TICK, gettimetick(2) + 20; // set the new debuff
+ 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);
diff --git a/world/map/npc/magic/level1-transmute-wood.txt b/world/map/npc/magic/level1-transmute-wood.txt
index 9ec8403e..935ed2fa 100644
--- a/world/map/npc/magic/level1-transmute-wood.txt
+++ b/world/map/npc/magic/level1-transmute-wood.txt
@@ -1,10 +1,11 @@
-|script|spell-transmute-wood|32767
{
- if(call("magic_checks")) end; // << I wish we had functions that could return >>
+ if(call("magic_checks")) end;
if (Sp < 5) end;
if (getskilllv(.school) < .level) end;
if (countitem("RawLog") >= 1) delitem "RawLog", 1; else end;
- set MAGIC_CAST_TICK, gettimetick(2) + 4; // set the new debuff
+ 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);
diff --git a/world/map/npc/magic/level2-arrow-hail.txt b/world/map/npc/magic/level2-arrow-hail.txt
index f1a3686b..3be14f1a 100644
--- a/world/map/npc/magic/level2-arrow-hail.txt
+++ b/world/map/npc/magic/level2-arrow-hail.txt
@@ -4,7 +4,7 @@
end;
OnCast:
- if(call("magic_checks")) end; // << I wish we had functions that could return >>
+ if(call("magic_checks")) end;
if (getskilllv(.school) < .level) end;
if (getskilllv(SKILL_MAGIC) < .level) end;
if (Sp < 25) end;
@@ -16,7 +16,8 @@ OnCast:
else end;
delitem "SulphurPowder", 1;
set Sp, Sp - 25;
- set MAGIC_CAST_TICK, gettimetick(2) + 5; // set the new debuff
+ 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;
@@ -77,7 +78,9 @@ 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 3, strnpcinfo(3), getnpcx(), getnpcy(), getnpcx(), getnpcy(), strnpcinfo(0) + "::OnHit";
+ 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;
diff --git a/world/map/npc/magic/level2-barrier.txt b/world/map/npc/magic/level2-barrier.txt
index 8d74414a..3f78677b 100644
--- a/world/map/npc/magic/level2-barrier.txt
+++ b/world/map/npc/magic/level2-barrier.txt
@@ -1,6 +1,6 @@
-|script|magic barrier|32767
{
- if(call("magic_checks")) end; // << I wish we had functions that could return >>
+ if(call("magic_checks")) end;
if (Sp < 15) end;
set .@level, getskilllv(.school);
if (.@level < .level) end;
@@ -16,7 +16,8 @@
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 MAGIC_CAST_TICK, gettimetick(2) + 1; // set the new debuff
+ 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);
@@ -34,6 +35,7 @@
end;
OnEnd:
+ if (sc_check(SC_MBARRIER) != 1) end;
message strcharinfo(0), "Barrier : Your magical barrier dissipates.";
misceffect FX_MAGIC_DEFAULT, strcharinfo(0);
end;
diff --git a/world/map/npc/magic/level2-detect-players.txt b/world/map/npc/magic/level2-detect-players.txt
index 41ab2e03..9867b700 100644
--- a/world/map/npc/magic/level2-detect-players.txt
+++ b/world/map/npc/magic/level2-detect-players.txt
@@ -1,12 +1,13 @@
-|script|detect-players|32767
{
- if(call("magic_checks")) end; // << I wish we had functions that could return >>
+ if(call("magic_checks")) end;
if (Sp < 7) end;
if (getskilllv(.school) < .level) end;
- set MAGIC_CAST_TICK, gettimetick(2) + 1; // XXX the casttime is 300 so should this be 0 ?
+ 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_DARKRED, strcharinfo(0);
+ misceffect FX_MAGIC_GENERIC, strcharinfo(0);
callfunc "magic_exp";
set @inwilt$, "";
set .@d, @spellpower/2;
diff --git a/world/map/npc/magic/level2-enchant-lifestone.txt b/world/map/npc/magic/level2-enchant-lifestone.txt
index 19cc0a84..ba8536bf 100644
--- a/world/map/npc/magic/level2-enchant-lifestone.txt
+++ b/world/map/npc/magic/level2-enchant-lifestone.txt
@@ -1,6 +1,6 @@
-|script|enchant-lifestone|32767
{
- if(call("magic_checks")) end; // << I wish we had functions that could return >>
+ if(call("magic_checks")) end;
if (Sp < 15) end;
if (getskilllv(.school) < .level) end;
if (countitem("BugLeg") >= 1) delitem "BugLeg", 1;
@@ -17,7 +17,8 @@ L_Herbs:
goto L_Proceed;
L_Proceed:
- set MAGIC_CAST_TICK, gettimetick(2) + 4; // set the new debuff
+ 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);
diff --git a/world/map/npc/magic/level2-flying-backpack.txt b/world/map/npc/magic/level2-flying-backpack.txt
index 2480ef14..b87fba02 100644
--- a/world/map/npc/magic/level2-flying-backpack.txt
+++ b/world/map/npc/magic/level2-flying-backpack.txt
@@ -1,13 +1,14 @@
-|script|flying-backpack|32767
{
- if(call("magic_checks")) end; // << I wish we had functions that could return >>
+ 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 MAGIC_CAST_TICK, gettimetick(2) + 1; // set the new debuff
+ 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);
@@ -25,6 +26,7 @@
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;
diff --git a/world/map/npc/magic/level2-happy-curse.txt b/world/map/npc/magic/level2-happy-curse.txt
index a6e314dd..190c7d23 100644
--- a/world/map/npc/magic/level2-happy-curse.txt
+++ b/world/map/npc/magic/level2-happy-curse.txt
@@ -1,6 +1,6 @@
-|script|happy-curse|32767
{
- if(call("magic_checks")) end; // << I wish we had functions that could return >>
+ if(call("magic_checks")) end;
if (Sp < 13) end;
set .@level, getskilllv(.school);
if (.@level < .level) end;
@@ -10,7 +10,8 @@
set @target_id, getcharid(3, @args$);
if (@target_id < 1 || !(isloggedin(@target_id))) set @target_id, BL_ID; // fallback to self
- set MAGIC_CAST_TICK, gettimetick(2) + 1; // set the new debuff
+ 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);
diff --git a/world/map/npc/magic/level2-hide.txt b/world/map/npc/magic/level2-hide.txt
index d6bf538c..1895cff1 100644
--- a/world/map/npc/magic/level2-hide.txt
+++ b/world/map/npc/magic/level2-hide.txt
@@ -1,6 +1,6 @@
-|script|spell-hide|32767
{
- if(call("magic_checks")) end; // << I wish we had functions that could return >>
+ if(call("magic_checks")) end;
if (Sp < 11) end;
set .@level, getskilllv(.school);
if (.@level < .level) end;
@@ -10,7 +10,8 @@
set @target_id, getcharid(3, @args$);
if (@target_id < 1 || !(isloggedin(@target_id))) set @target_id, BL_ID; // fallback to self
- set MAGIC_CAST_TICK, gettimetick(2) + 1; // set the new debuff
+ 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);
@@ -29,6 +30,7 @@
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;
diff --git a/world/map/npc/magic/level2-lay-on-hands.txt b/world/map/npc/magic/level2-lay-on-hands.txt
index ab5b2616..4e3a1e9c 100644
--- a/world/map/npc/magic/level2-lay-on-hands.txt
+++ b/world/map/npc/magic/level2-lay-on-hands.txt
@@ -1,6 +1,6 @@
-|script|lay-on-hands|32767
{
- if(call("magic_checks")) end; // << I wish we had functions that could return >>
+ if(call("magic_checks")) end;
if (Sp < 10) end;
if (getskilllv(.school) < .level) end;
if (getskilllv(SKILL_MAGIC) < .level) end;
@@ -16,7 +16,8 @@
goto L_Pay;
L_Pay:
- set MAGIC_CAST_TICK, gettimetick(2) + 1; // XXX should this be 0 ?
+ 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
diff --git a/world/map/npc/magic/level2-lightning-strike.txt b/world/map/npc/magic/level2-lightning-strike.txt
index c9cf4602..67d1a72e 100644
--- a/world/map/npc/magic/level2-lightning-strike.txt
+++ b/world/map/npc/magic/level2-lightning-strike.txt
@@ -1,19 +1,21 @@
-|script|lightning-strike|32767
{
- if(call("magic_checks")) end; // << I wish we had functions that could return >>
+ 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 MAGIC_CAST_TICK, gettimetick(2) + 1; // set the new debuff
+ 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);
set @ingrav_sp, @spellpower;
set @ingrav_luk, Luk;
- overrideattack (@spellpower/90)+1, 3000, 8, ATTACK_ICON_GENERIC, 31, strnpcinfo(0)+"::OnAttack";
+ set .@delay, (((200 - Agi) * 3000) / 200);
+ overrideattack (@spellpower/90)+1, .@delay, 8, ATTACK_ICON_GENERIC, 31, strnpcinfo(0)+"::OnAttack";
callfunc "magic_exp";
end;
@@ -42,7 +44,7 @@ OnNpc:
L_InRain:
set @used, 0;
- foreach 3, getmap(), @ar[0], @ar[1], @ar[2], @ar[3], strnpcinfo(0)+"::OnEntityInRain";
+ foreach 0, getmap(), @ar[0], @ar[1], @ar[2], @ar[3], strnpcinfo(0)+"::OnEntityInRain";
if (@used >= 1 && (@ingrav_luk + rand(200)) >= 150) end;
misceffect FX_LIGHTNING1 + rand(3), strcharinfo(0);
heal 0 - @ingrav_sp, 0;
diff --git a/world/map/npc/magic/level2-magic-knuckles.txt b/world/map/npc/magic/level2-magic-knuckles.txt
index a91feeb2..3f4d4667 100644
--- a/world/map/npc/magic/level2-magic-knuckles.txt
+++ b/world/map/npc/magic/level2-magic-knuckles.txt
@@ -1,17 +1,19 @@
-|script|magic-knuckles|32767
{
- if(call("magic_checks")) end; // << I wish we had functions that could return >>
+ 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 MAGIC_CAST_TICK, gettimetick(2) + 1; // set the new debuff
+ 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);
- overrideattack (@spellpower/10)+10, 1300, 1, ATTACK_ICON_GENERIC, 34, strnpcinfo(0)+"::OnAttack";
+ set .@delay, (((200 - Agi) * 1300) / 200);
+ overrideattack (@spellpower/10)+10, .@delay, 1, ATTACK_ICON_GENERIC, 34, strnpcinfo(0)+"::OnAttack";
callfunc "magic_exp";
set @upmaru_str, Str; // do not allow to equip light armor, cast, and then switch to heavy armor to get bonus str
end;
@@ -22,7 +24,7 @@ OnAttack:
OnInit:
set .school, SKILL_MAGIC_WAR;
- set .invocation$, chr(MAGIC_SYMBOL) + "upmaru"; // used in npcs that refer to this spell
+ 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;
diff --git a/world/map/npc/magic/level2-make-arrows.txt b/world/map/npc/magic/level2-make-arrows.txt
index db3250a6..5bad035b 100644
--- a/world/map/npc/magic/level2-make-arrows.txt
+++ b/world/map/npc/magic/level2-make-arrows.txt
@@ -1,12 +1,13 @@
-|script|make-arrows|32767
{
- if(call("magic_checks")) end; // << I wish we had functions that could return >>
+ 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 MAGIC_CAST_TICK, gettimetick(2) + 5; // set the new debuff
+ 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);
diff --git a/world/map/npc/magic/level2-make-iron-powder.txt b/world/map/npc/magic/level2-make-iron-powder.txt
index 7cf7a134..55bdd0b9 100644
--- a/world/map/npc/magic/level2-make-iron-powder.txt
+++ b/world/map/npc/magic/level2-make-iron-powder.txt
@@ -1,12 +1,13 @@
-|script|make-iron-powder|32767
{
- if(call("magic_checks")) end; // << I wish we had functions that could return >>
+ 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 MAGIC_CAST_TICK, gettimetick(2) + 5; // set the new debuff
+ 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);
diff --git a/world/map/npc/magic/level2-make-shirt.txt b/world/map/npc/magic/level2-make-shirt.txt
index 8585a509..b7a1570f 100644
--- a/world/map/npc/magic/level2-make-shirt.txt
+++ b/world/map/npc/magic/level2-make-shirt.txt
@@ -1,10 +1,11 @@
-|script|make-shirt|32767
{
- if(call("magic_checks")) end; // << I wish we had functions that could return >>
+ if(call("magic_checks")) end;
if (Sp < 25) end;
if (getskilllv(.school) < .level) end;
if (countitem("CottonCloth") >= 5) delitem "CottonCloth", 5; else end;
- set MAGIC_CAST_TICK, gettimetick(2) + 5; // set the new debuff
+ 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);
diff --git a/world/map/npc/magic/level2-make-short-tanktop.txt b/world/map/npc/magic/level2-make-short-tanktop.txt
index 69297483..eee48425 100644
--- a/world/map/npc/magic/level2-make-short-tanktop.txt
+++ b/world/map/npc/magic/level2-make-short-tanktop.txt
@@ -1,10 +1,11 @@
-|script|make-short-tanktop|32767
{
- if(call("magic_checks")) end; // << I wish we had functions that could return >>
+ if(call("magic_checks")) end;
if (Sp < 25) end;
if (getskilllv(.school) < .level) end;
if (countitem("CottonCloth") >= 3) delitem "CottonCloth", 3; else end;
- set MAGIC_CAST_TICK, gettimetick(2) + 5; // set the new debuff
+ 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);
diff --git a/world/map/npc/magic/level2-make-tanktop.txt b/world/map/npc/magic/level2-make-tanktop.txt
index cec49d2e..678cf650 100644
--- a/world/map/npc/magic/level2-make-tanktop.txt
+++ b/world/map/npc/magic/level2-make-tanktop.txt
@@ -1,10 +1,11 @@
-|script|make-tanktop|32767
{
- if(call("magic_checks")) end; // << I wish we had functions that could return >>
+ if(call("magic_checks")) end;
if (Sp < 25) end;
if (getskilllv(.school) < .level) end;
if (countitem("CottonCloth") >= 4) delitem "CottonCloth", 4; else end;
- set MAGIC_CAST_TICK, gettimetick(2) + 5; // set the new debuff
+ 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);
diff --git a/world/map/npc/magic/level2-protect.txt b/world/map/npc/magic/level2-protect.txt
index bee84133..e66aab3a 100644
--- a/world/map/npc/magic/level2-protect.txt
+++ b/world/map/npc/magic/level2-protect.txt
@@ -1,6 +1,6 @@
-|script|protect|32767
{
- if(call("magic_checks")) end; // << I wish we had functions that could return >>
+ if(call("magic_checks")) end;
if (Sp < 14) end;
set .@level, getskilllv(.school);
if (.@level < .level) end;
@@ -16,7 +16,8 @@
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 MAGIC_CAST_TICK, gettimetick(2) + 2; // set the new debuff
+ 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);
@@ -34,6 +35,7 @@
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;
diff --git a/world/map/npc/magic/level2-rain.txt b/world/map/npc/magic/level2-rain.txt
index 2d13cc8d..d3718170 100644
--- a/world/map/npc/magic/level2-rain.txt
+++ b/world/map/npc/magic/level2-rain.txt
@@ -4,7 +4,7 @@
end;
OnCast:
- if(call("magic_checks")) end; // << I wish we had functions that could return >>
+ if(call("magic_checks")) end;
if (getskilllv(.school) < .level) end;
if (getskilllv(SKILL_MAGIC) < .level) end;
if (Sp < 17) end;
@@ -14,7 +14,8 @@ OnCast:
if (getskilllv(.school) < 4 && countitem("BottleOfWater") >= 1) delitem "BottleOfWater", 1;
elif (getskilllv(.school) < 4) end;
set Sp, Sp - 17;
- set MAGIC_CAST_TICK, gettimetick(2) + 3; // set the new debuff
+ 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
@@ -74,7 +75,7 @@ OnLaunch:
S_Launch:
npcareawarp .initial_x - .radius, .initial_y - .radius, .initial_x + .radius, .initial_y + .radius, 0, strnpcinfo(0);
misceffect FX_RAIN;
- foreach 3, strnpcinfo(3), getnpcx()-1, getnpcy()-1, getnpcx()+1, getnpcy()+1, strnpcinfo(0) + "::OnHit";
+ 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;
@@ -84,7 +85,7 @@ OnHit:
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(elttype(@target_id) == ELT_FIRE)
+ if(get(ELTTYPE, @target_id) == ELT_FIRE)
injure .caster, @target_id, rand((@spellpower/15)+5)+2;
end;
diff --git a/world/map/npc/magic/level2-shear.txt b/world/map/npc/magic/level2-shear.txt
index afa6a59e..c76b1093 100644
--- a/world/map/npc/magic/level2-shear.txt
+++ b/world/map/npc/magic/level2-shear.txt
@@ -1,14 +1,16 @@
-|script|shear|32767
{
- if(call("magic_checks")) end; // << I wish we had functions that could return >>
+ if(call("magic_checks")) end;
if (Sp < 23) end;
if (getskilllv(SKILL_MAGIC) < .level) end;
if (getskilllv(.school) < .level) end;
- set MAGIC_CAST_TICK, gettimetick(2) + 1; // set the new debuff
+ 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);
- overrideattack 1, 2000, 1, ATTACK_ICON_SHEARING, 30, strnpcinfo(0)+"::OnAttack";
+ set .@delay, (((200 - Agi) * 2000) / 200);
+ overrideattack 1, .@delay, 1, ATTACK_ICON_SHEARING, 30, strnpcinfo(0)+"::OnAttack";
callfunc "magic_exp";
set @chipchip_sp, @spellpower;
end;
diff --git a/world/map/npc/magic/level2-summon-fluffies.txt b/world/map/npc/magic/level2-summon-fluffies.txt
index 32fcd750..cd754e33 100644
--- a/world/map/npc/magic/level2-summon-fluffies.txt
+++ b/world/map/npc/magic/level2-summon-fluffies.txt
@@ -3,14 +3,15 @@
end;
OnCast:
- if(call("magic_checks")) end; // << I wish we had functions that could return >>
+ 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 MAGIC_CAST_TICK, gettimetick(2) + 20; // set the new debuff
+ 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);
diff --git a/world/map/npc/magic/level2-summon-mouboo.txt b/world/map/npc/magic/level2-summon-mouboo.txt
index 5055362f..8eb074c6 100644
--- a/world/map/npc/magic/level2-summon-mouboo.txt
+++ b/world/map/npc/magic/level2-summon-mouboo.txt
@@ -3,14 +3,15 @@
end;
OnCast:
- if(call("magic_checks")) end; // << I wish we had functions that could return >>
+ 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 MAGIC_CAST_TICK, gettimetick(2) + 20; // set the new debuff
+ 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);
diff --git a/world/map/npc/magic/level2-summon-pinkie.txt b/world/map/npc/magic/level2-summon-pinkie.txt
index f4716749..b91ec1d9 100644
--- a/world/map/npc/magic/level2-summon-pinkie.txt
+++ b/world/map/npc/magic/level2-summon-pinkie.txt
@@ -3,14 +3,15 @@
end;
OnCast:
- if(call("magic_checks")) end; // << I wish we had functions that could return >>
+ 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 MAGIC_CAST_TICK, gettimetick(2) + 20; // set the new debuff
+ 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);
diff --git a/world/map/npc/magic/level2-summon-snakes.txt b/world/map/npc/magic/level2-summon-snakes.txt
index 4998fded..7490c506 100644
--- a/world/map/npc/magic/level2-summon-snakes.txt
+++ b/world/map/npc/magic/level2-summon-snakes.txt
@@ -3,7 +3,7 @@
end;
OnCast:
- if(call("magic_checks")) end; // << I wish we had functions that could return >>
+ if(call("magic_checks")) end;
if (Sp < 40) end;
if (getskilllv(SKILL_MAGIC) < .level) end;
if (getskilllv(.school) < .level) end;
@@ -11,7 +11,8 @@ OnCast:
if (OrumQuest <= 40) end;
delitem "DarkCrystal", 1;
delitem "SnakeEgg", 1;
- set MAGIC_CAST_TICK, gettimetick(2) + 15; // set the new debuff
+ 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);
diff --git a/world/map/npc/magic/level2-summon-spiky-mushroom.txt b/world/map/npc/magic/level2-summon-spiky-mushroom.txt
index 97d916b0..39ad9ecd 100644
--- a/world/map/npc/magic/level2-summon-spiky-mushroom.txt
+++ b/world/map/npc/magic/level2-summon-spiky-mushroom.txt
@@ -3,14 +3,15 @@
end;
OnCast:
- if(call("magic_checks")) end; // << I wish we had functions that could return >>
+ 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 MAGIC_CAST_TICK, gettimetick(2) + 20; // set the new debuff
+ 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);
diff --git a/world/map/npc/magic/level2-summon-wickedmushroom.txt b/world/map/npc/magic/level2-summon-wickedmushroom.txt
index 3960437a..df17742f 100644
--- a/world/map/npc/magic/level2-summon-wickedmushroom.txt
+++ b/world/map/npc/magic/level2-summon-wickedmushroom.txt
@@ -3,7 +3,7 @@
end;
OnCast:
- if(call("magic_checks")) end; // << I wish we had functions that could return >>
+ if(call("magic_checks")) end;
if (Sp < 35) end;
if (getskilllv(SKILL_MAGIC) < .level) end;
if (getskilllv(.school) < .level) end;
@@ -11,7 +11,8 @@ OnCast:
if (OrumQuest <= 36) end;
delitem "DarkCrystal", 1;
delitem "SmallMushroom", 1;
- set MAGIC_CAST_TICK, gettimetick(2) + 15; // set the new debuff
+ 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);
diff --git a/world/map/npc/magic/level2-toxic-dart.txt b/world/map/npc/magic/level2-toxic-dart.txt
index 9674b64f..a14710d6 100644
--- a/world/map/npc/magic/level2-toxic-dart.txt
+++ b/world/map/npc/magic/level2-toxic-dart.txt
@@ -1,26 +1,27 @@
-|script|toxic-dart|32767
{
- if(call("magic_checks")) end; // << I wish we had functions that could return >>
+ 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 MAGIC_CAST_TICK, gettimetick(2) + 1; // set the new debuff
+ 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);
- set @damage, sqrt(@spellpower) * 5;
- set @dmg_bonus, (BaseLevel/3) + 5;
- overrideattack (@spellpower/75)+3, 1200, 4, ATTACK_ICON_GENERIC, 31, strnpcinfo(0)+"::OnAttack";
+ setarray @phlex_damage[0], (sqrt(@spellpower) * 5), ((BaseLevel/3) + 5);
+ set .@delay, (((200 - Agi) * 1200) / 200);
+ overrideattack (@spellpower/75)+3, .@delay, 4, ATTACK_ICON_GENERIC, 31, strnpcinfo(0)+"::OnAttack";
callfunc "magic_exp";
end;
OnAttack:
misceffect FX_MAGIC_DARKRED, strcharinfo(0);
if (target(BL_ID, @target_id, 50) != 50) end; // 0x20 | 0x02 | 0x10
- void call("elt_damage", @damage, @dmg_bonus, ELT_NEUTRAL, ELT_POISON, FX_FIRE_BURST);
+ void call("elt_damage", @phlex_damage[0], @phlex_damage[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, 5000+(@spellpower*1200), max(15,@spellpower/15)+5, @target_id;
end;
diff --git a/world/map/npc/magic/level3-necromancy.txt b/world/map/npc/magic/level3-necromancy.txt
index 66643d39..ef2d761f 100644
--- a/world/map/npc/magic/level3-necromancy.txt
+++ b/world/map/npc/magic/level3-necromancy.txt
@@ -16,7 +16,8 @@
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 MAGIC_CAST_TICK, gettimetick(2) + 20;
+ 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
diff --git a/world/map/npc/scripts.conf b/world/map/npc/scripts.conf
index 57aa43e0..0935f246 100644
--- a/world/map/npc/scripts.conf
+++ b/world/map/npc/scripts.conf
@@ -17,8 +17,6 @@ npc: npc/functions/soul_menhir.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
@@ -34,7 +32,6 @@ 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