summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--changelog.txt10
-rw-r--r--conf/atcommand_athena.conf.example (renamed from conf/atcommand_athena.conf)0
-rw-r--r--conf/battle_athena.conf.example (renamed from conf/battle_athena.conf)6
-rw-r--r--conf/char_athena.conf.example (renamed from conf/char_athena.conf)9
-rw-r--r--conf/eathena-monitor.conf.example (renamed from conf/eathena-monitor.conf)0
-rw-r--r--conf/gm_account.txt.example (renamed from conf/gm_account.txt)0
-rw-r--r--conf/inter_athena.conf.example (renamed from conf/inter_athena.conf)0
-rw-r--r--conf/ladmin_athena.conf.example (renamed from conf/ladmin_athena.conf)0
-rw-r--r--conf/lan_support.conf.example (renamed from conf/lan_support.conf)0
-rw-r--r--conf/login_athena.conf.example (renamed from conf/login_athena.conf)5
-rw-r--r--conf/magic.conf580
-rw-r--r--conf/map_athena.conf209
-rw-r--r--conf/map_athena.conf.example348
-rw-r--r--conf/motd.txt.example (renamed from conf/motd.txt)0
-rw-r--r--conf/msg_athena.conf.example (renamed from conf/msg_athena.conf)0
-rw-r--r--conf/script_athena.conf.example (renamed from conf/script_athena.conf)0
-rw-r--r--data/new_1-1.wlkbin40004 -> 17412 bytes
-rw-r--r--data/new_13-1.wlkbin16004 -> 16004 bytes
-rw-r--r--data/new_14-1.wlkbin18604 -> 18004 bytes
-rw-r--r--data/new_15-1.wlkbin38004 -> 26224 bytes
-rw-r--r--data/new_18-1.wlkbin18484 -> 18484 bytes
-rw-r--r--data/new_20-1.wlkbin40004 -> 24004 bytes
-rw-r--r--data/new_23-1.wlkbin11774 -> 11774 bytes
-rw-r--r--data/new_25-1.wlkbin22504 -> 22504 bytes
-rw-r--r--data/new_26-1.wlkbin0 -> 28228 bytes
-rw-r--r--data/new_27-1.wlkbin0 -> 109204 bytes
-rw-r--r--data/new_28-1.wlkbin0 -> 19100 bytes
-rw-r--r--data/new_29-1.wlkbin0 -> 16804 bytes
-rw-r--r--data/new_3-1.wlkbin40004 -> 19042 bytes
-rw-r--r--data/new_30-1.wlkbin0 -> 28004 bytes
-rw-r--r--data/new_31-1.wlkbin0 -> 16804 bytes
-rw-r--r--data/new_32-1.wlkbin0 -> 16804 bytes
-rw-r--r--data/new_33-1.wlkbin0 -> 19100 bytes
-rw-r--r--data/new_34-1.wlkbin0 -> 15565 bytes
-rw-r--r--data/new_35-1.wlkbin0 -> 30204 bytes
-rw-r--r--data/new_36-1.wlkbin0 -> 5548 bytes
-rw-r--r--data/new_37-1.wlkbin0 -> 24004 bytes
-rw-r--r--data/new_38-1.wlkbin0 -> 10224 bytes
-rw-r--r--data/new_7-1.wlkbin26004 -> 26004 bytes
-rw-r--r--data/new_8-1.wlkbin16004 -> 16004 bytes
-rw-r--r--data/new_9-1.wlkbin19100 -> 19100 bytes
-rw-r--r--data/resnametable.txt612
-rw-r--r--db/const.txt147
-rw-r--r--db/item_db.txt441
-rw-r--r--db/job_db1.txt2
-rw-r--r--db/mob_db.txt63
-rw-r--r--db/skill_db.txt6
-rw-r--r--db/statpoint.txt476
-rw-r--r--eathena-monitor.c6
-rw-r--r--news.txt274
-rw-r--r--npc/arena/guards.txt23
-rw-r--r--npc/arena/monsters.txt1
-rw-r--r--npc/cave-big/monsters.txt2
-rw-r--r--npc/cave-big/passages.txt1
-rw-r--r--npc/cave-small/hermit.txt14
-rw-r--r--npc/cave-small/monsters.txt1
-rw-r--r--npc/cave1/miners.txt39
-rw-r--r--npc/cave1/monsters.txt26
-rw-r--r--npc/cave2/monsters.txt25
-rw-r--r--npc/cave2/passages.txt4
-rw-r--r--npc/dimonds-cove/doug.txt90
-rw-r--r--npc/dimonds-cove/workers.txt9
-rw-r--r--npc/easter2008/monsters.txt28
-rw-r--r--npc/eastern-desert-pass/monsters.txt2
-rw-r--r--npc/eastern-desert-pass/npcs.txt136
-rw-r--r--npc/eastern-desert-pass/passages.txt84
-rw-r--r--npc/eastern-desert/monsters.txt3
-rw-r--r--npc/eastern-desert/passages.txt8
-rw-r--r--npc/functions/banker.txt160
-rw-r--r--npc/functions/barber.txt66
-rw-r--r--npc/functions/game_rules.txt108
-rw-r--r--npc/functions/inn.txt30
-rw-r--r--npc/functions/mob_points.txt42
-rw-r--r--npc/functions/process_equip.txt27
-rw-r--r--npc/functions/slot_machine.txt35
-rw-r--r--npc/functions/soul_menhir.txt34
-rw-r--r--npc/halloween/2006/halloween1.txt (renamed from npc/halloween/halloween1.txt)0
-rw-r--r--npc/halloween/2006/halloween10.txt (renamed from npc/halloween/halloween10.txt)0
-rw-r--r--npc/halloween/2006/halloween11.txt (renamed from npc/halloween/halloween11.txt)0
-rw-r--r--npc/halloween/2006/halloween12.txt (renamed from npc/halloween/halloween12.txt)0
-rw-r--r--npc/halloween/2006/halloween13.txt (renamed from npc/halloween/halloween13.txt)0
-rw-r--r--npc/halloween/2006/halloween14.txt (renamed from npc/halloween/halloween14.txt)0
-rw-r--r--npc/halloween/2006/halloween15.txt (renamed from npc/halloween/halloween15.txt)0
-rw-r--r--npc/halloween/2006/halloween16.txt (renamed from npc/halloween/halloween16.txt)0
-rw-r--r--npc/halloween/2006/halloween17.txt (renamed from npc/halloween/halloween17.txt)0
-rw-r--r--npc/halloween/2006/halloween18.txt (renamed from npc/halloween/halloween18.txt)0
-rw-r--r--npc/halloween/2006/halloween19.txt (renamed from npc/halloween/halloween19.txt)0
-rw-r--r--npc/halloween/2006/halloween2.txt (renamed from npc/halloween/halloween2.txt)0
-rw-r--r--npc/halloween/2006/halloween20.txt (renamed from npc/halloween/halloween20.txt)0
-rw-r--r--npc/halloween/2006/halloween3.txt (renamed from npc/halloween/halloween3.txt)0
-rw-r--r--npc/halloween/2006/halloween4.txt (renamed from npc/halloween/halloween4.txt)0
-rw-r--r--npc/halloween/2006/halloween5.txt (renamed from npc/halloween/halloween5.txt)0
-rw-r--r--npc/halloween/2006/halloween6.txt (renamed from npc/halloween/halloween6.txt)0
-rw-r--r--npc/halloween/2006/halloween7.txt (renamed from npc/halloween/halloween7.txt)0
-rw-r--r--npc/halloween/2006/halloween8.txt (renamed from npc/halloween/halloween8.txt)0
-rw-r--r--npc/halloween/2006/halloween9.txt (renamed from npc/halloween/halloween9.txt)0
-rw-r--r--npc/halloween/2006/monsters.txt (renamed from npc/halloween/monsters.txt)0
-rw-r--r--npc/halloween/2008/monsters.txt137
-rw-r--r--npc/halloween/2008/prize_master.txt455
-rw-r--r--npc/ice-cave/monsters.txt5
-rw-r--r--npc/new_1-1-western-desert/dark_mage.txt46
-rw-r--r--npc/new_1-1-western-desert/merchant.txt (renamed from npc/western-desert/merchant.txt)2
-rw-r--r--npc/new_1-1-western-desert/monsters.txt24
-rw-r--r--npc/new_1-1-western-desert/nomads.txt (renamed from npc/western-desert/nomads.txt)6
-rw-r--r--npc/new_1-1-western-desert/passages.txt5
-rw-r--r--npc/new_1-1-western-desert/rogue.txt84
-rw-r--r--npc/new_10-1-xmas/monsters.txt20
-rw-r--r--npc/new_10-1-xmas/passages.txt (renamed from npc/xmas/passages.txt)0
-rw-r--r--npc/new_10-1-xmas/santa.txt (renamed from npc/xmas/santa.txt)0
-rw-r--r--npc/new_10-1-xmas/snowman.txt52
-rw-r--r--npc/new_10-1-xmas/taro.txt73
-rw-r--r--npc/new_10-1-xmas/xmas1.txt (renamed from npc/xmas/xmas1.txt)0
-rw-r--r--npc/new_10-1-xmas/xmas10.txt (renamed from npc/xmas/xmas10.txt)0
-rw-r--r--npc/new_10-1-xmas/xmas11.txt (renamed from npc/xmas/xmas11.txt)0
-rw-r--r--npc/new_10-1-xmas/xmas12.txt (renamed from npc/xmas/xmas12.txt)0
-rw-r--r--npc/new_10-1-xmas/xmas13.txt (renamed from npc/xmas/xmas13.txt)0
-rw-r--r--npc/new_10-1-xmas/xmas14.txt (renamed from npc/xmas/xmas14.txt)0
-rw-r--r--npc/new_10-1-xmas/xmas15.txt (renamed from npc/xmas/xmas15.txt)0
-rw-r--r--npc/new_10-1-xmas/xmas16.txt (renamed from npc/xmas/xmas16.txt)0
-rw-r--r--npc/new_10-1-xmas/xmas17.txt (renamed from npc/xmas/xmas17.txt)0
-rw-r--r--npc/new_10-1-xmas/xmas18.txt (renamed from npc/xmas/xmas18.txt)0
-rw-r--r--npc/new_10-1-xmas/xmas19.txt (renamed from npc/xmas/xmas19.txt)0
-rw-r--r--npc/new_10-1-xmas/xmas2.txt (renamed from npc/xmas/xmas2.txt)0
-rw-r--r--npc/new_10-1-xmas/xmas20.txt (renamed from npc/xmas/xmas20.txt)0
-rw-r--r--npc/new_10-1-xmas/xmas3.txt (renamed from npc/xmas/xmas3.txt)0
-rw-r--r--npc/new_10-1-xmas/xmas4.txt (renamed from npc/xmas/xmas4.txt)0
-rw-r--r--npc/new_10-1-xmas/xmas5.txt (renamed from npc/xmas/xmas5.txt)0
-rw-r--r--npc/new_10-1-xmas/xmas6.txt (renamed from npc/xmas/xmas6.txt)0
-rw-r--r--npc/new_10-1-xmas/xmas7.txt (renamed from npc/xmas/xmas7.txt)0
-rw-r--r--npc/new_10-1-xmas/xmas8.txt (renamed from npc/xmas/xmas8.txt)0
-rw-r--r--npc/new_10-1-xmas/xmas9.txt (renamed from npc/xmas/xmas9.txt)0
-rw-r--r--npc/new_11-1-snow-village/amrak.txt17
-rw-r--r--npc/new_11-1-snow-village/monsters.txt14
-rw-r--r--npc/new_11-1-snow-village/passages.txt (renamed from npc/snow-village/passages.txt)11
-rw-r--r--npc/new_11-1-snow-village/sexchanger.txt27
-rw-r--r--npc/new_11-1-snow-village/soul-menhir.txt6
-rw-r--r--npc/new_11-1-snow-village/startrek.txt18
-rw-r--r--npc/new_12-1-ice-cave/monsters.txt20
-rw-r--r--npc/new_12-1-ice-cave/passages.txt (renamed from npc/ice-cave/passages.txt)2
-rw-r--r--npc/new_13-1-snow-village-shops/furquest.txt329
-rw-r--r--npc/new_13-1-snow-village-shops/passages.txt10
-rw-r--r--npc/new_13-1-snow-village-shops/shops.txt19
-rw-r--r--npc/new_14-1-south-woodland/monsters.txt40
-rw-r--r--npc/new_14-1-south-woodland/passages.txt4
-rw-r--r--npc/new_15-1-woodland-desert/monsters.txt20
-rw-r--r--npc/new_15-1-woodland-desert/passages.txt3
-rw-r--r--npc/new_16-1-south-east-woodland/monsters.txt35
-rw-r--r--npc/new_16-1-south-east-woodland/passages.txt4
-rw-r--r--npc/new_17-1-cave-big/monsters.txt20
-rw-r--r--npc/new_17-1-cave-big/passages.txt2
-rw-r--r--npc/new_18-1-woodland-village/george.txt25
-rw-r--r--npc/new_18-1-woodland-village/hinnak.txt100
-rw-r--r--npc/new_18-1-woodland-village/monsters.txt34
-rw-r--r--npc/new_18-1-woodland-village/passages.txt19
-rw-r--r--npc/new_19-1-woodland-village/jack.txt253
-rw-r--r--npc/new_19-1-woodland-village/milly.txt25
-rw-r--r--npc/new_19-1-woodland-village/old_man.txt34
-rw-r--r--npc/new_19-1-woodland-village/old_woman.txt56
-rw-r--r--npc/new_19-1-woodland-village/passages.txt30
-rw-r--r--npc/new_19-1-woodland-village/sabine.txt26
-rw-r--r--npc/new_19-1-woodland-village/soul-menhir.txt8
-rw-r--r--npc/new_2-1-cave1/miners.txt39
-rw-r--r--npc/new_2-1-cave1/monsters.txt20
-rw-r--r--npc/new_2-1-cave1/passages.txt1
-rw-r--r--npc/new_20-1-woodland-village/alan.txt211
-rw-r--r--npc/new_20-1-woodland-village/doctor.txt67
-rw-r--r--npc/new_20-1-woodland-village/drunks.txt16
-rw-r--r--npc/new_20-1-woodland-village/inspector.txt127
-rw-r--r--npc/new_20-1-woodland-village/kfahr.txt1224
-rw-r--r--npc/new_20-1-woodland-village/misc.txt11
-rw-r--r--npc/new_20-1-woodland-village/nicholas.txt404
-rw-r--r--npc/new_20-1-woodland-village/nurse.txt48
-rw-r--r--npc/new_20-1-woodland-village/passages.txt (renamed from npc/woodland-village/passages.txt)6
-rw-r--r--npc/new_20-1-woodland-village/richard.txt6
-rw-r--r--npc/new_20-1-woodland-village/selim.txt139
-rw-r--r--npc/new_20-1-woodland-village/shops.txt34
-rw-r--r--npc/new_20-1-woodland-village/waitress.txt51
-rw-r--r--npc/new_21-1-ice-cave2/monsters.txt20
-rw-r--r--npc/new_21-1-ice-cave2/passages.txt1
-rw-r--r--npc/new_22-1-snake-cave/monsters.txt14
-rw-r--r--npc/new_22-1-snake-cave/passages.txt2
-rw-r--r--npc/new_23-1-dimonds-cove/dimonds.txt (renamed from npc/dimonds-cove/dimonds.txt)87
-rw-r--r--npc/new_23-1-dimonds-cove/doug.txt101
-rw-r--r--npc/new_23-1-dimonds-cove/loratay.txt632
-rw-r--r--npc/new_23-1-dimonds-cove/passages.txt (renamed from npc/dimonds-cove/passages.txt)0
-rw-r--r--npc/new_23-1-dimonds-cove/workers.txt11
-rw-r--r--npc/new_24-1-eastern-desert-mountain-passage/mika.txt8
-rw-r--r--npc/new_24-1-eastern-desert-mountain-passage/monsters.txt14
-rw-r--r--npc/new_24-1-eastern-desert-mountain-passage/pachua.txt194
-rw-r--r--npc/new_24-1-eastern-desert-mountain-passage/passages.txt32
-rw-r--r--npc/new_25-1-eastern-desert-cave/monsters.txt14
-rw-r--r--npc/new_25-1-eastern-desert-cave/passages.txt19
-rw-r--r--npc/new_26-1-hill1/monsters.txt52
-rw-r--r--npc/new_26-1-hill1/passages.txt11
-rw-r--r--npc/new_26-1-hill1/shops.txt3
-rw-r--r--npc/new_27-1-hill2/monsters.txt20
-rw-r--r--npc/new_27-1-hill2/passages.txt9
-rw-r--r--npc/new_28-1-hillwest/monsters.txt63
-rw-r--r--npc/new_28-1-hillwest/passages.txt3
-rw-r--r--npc/new_29-1-west-woodland/monsters.txt69
-rw-r--r--npc/new_29-1-west-woodland/passages.txt3
-rw-r--r--npc/new_29-1-west-woodland/taro.txt74
-rw-r--r--npc/new_29-1-west-woodland/wedding-officiator.txt246
-rw-r--r--npc/new_3-1-tulimshar/banker.txt4
-rw-r--r--npc/new_3-1-tulimshar/barber.txt9
-rw-r--r--npc/new_3-1-tulimshar/bard.txt10
-rw-r--r--npc/new_3-1-tulimshar/bleacher.txt126
-rw-r--r--npc/new_3-1-tulimshar/children.txt105
-rw-r--r--npc/new_3-1-tulimshar/constable.txt7
-rw-r--r--npc/new_3-1-tulimshar/elanore.txt (renamed from npc/tulimshar/elanore.txt)74
-rw-r--r--npc/new_3-1-tulimshar/guards.txt74
-rw-r--r--npc/new_3-1-tulimshar/guide.txt162
-rw-r--r--npc/new_3-1-tulimshar/man.txt22
-rw-r--r--npc/new_3-1-tulimshar/merchant.txt1
-rw-r--r--npc/new_3-1-tulimshar/monster_guide.txt (renamed from npc/tulimshar/monster_guide.txt)2
-rw-r--r--npc/new_3-1-tulimshar/monsters.txt26
-rw-r--r--npc/new_3-1-tulimshar/passages.txt5
-rw-r--r--npc/new_3-1-tulimshar/rewards_master.txt87
-rw-r--r--npc/new_3-1-tulimshar/rules.txt7
-rw-r--r--npc/new_3-1-tulimshar/sandra.txt81
-rw-r--r--npc/new_3-1-tulimshar/soul-menhir.txt6
-rw-r--r--npc/new_3-1-tulimshar/vincent.txt102
-rw-r--r--npc/new_3-1-tulimshar/workers.txt13
-rw-r--r--npc/new_30-1-west-woodland-cave/monsters.txt14
-rw-r--r--npc/new_30-1-west-woodland-cave/passages.txt4
-rw-r--r--npc/new_31-1-southwest-woodland/alice.txt46
-rw-r--r--npc/new_31-1-southwest-woodland/monsters.txt46
-rw-r--r--npc/new_31-1-southwest-woodland/passages.txt1
-rw-r--r--npc/new_32-1-south-woodland-2/monsters.txt40
-rw-r--r--npc/new_32-1-south-woodland-2/passages.txt1
-rw-r--r--npc/new_33-1-hill-northwest/monsters.txt76
-rw-r--r--npc/new_33-1-hill-northwest/passages.txt1
-rw-r--r--npc/new_34-1-north-beach/monsters.txt26
-rw-r--r--npc/new_34-1-north-beach/passages.txt2
-rw-r--r--npc/new_35-1-woodland-village/monsters.txt26
-rw-r--r--npc/new_35-1-woodland-village/passages.txt5
-rw-r--r--npc/new_36-1-magic-house/apprentice.txt58
-rw-r--r--npc/new_36-1-magic-house/notes.txt102
-rw-r--r--npc/new_36-1-magic-house/passages.txt3
-rw-r--r--npc/new_36-1-magic-house/wizard.txt25
-rw-r--r--npc/new_37-1-woodland-mine/miners.txt6
-rw-r--r--npc/new_37-1-woodland-mine/monsters.txt39
-rw-r--r--npc/new_37-1-woodland-mine/passages.txt5
-rw-r--r--npc/new_38-1-woodland-mine/angus.txt19
-rw-r--r--npc/new_38-1-woodland-mine/books.txt18
-rw-r--r--npc/new_38-1-woodland-mine/caul.txt479
-rw-r--r--npc/new_38-1-woodland-mine/miners.txt15
-rw-r--r--npc/new_38-1-woodland-mine/monsters.txt14
-rw-r--r--npc/new_38-1-woodland-mine/passages.txt12
-rw-r--r--npc/new_38-1-woodland-mine/receptionist.txt65
-rw-r--r--npc/new_4-1-cave-small/hermit.txt16
-rw-r--r--npc/new_4-1-cave-small/monsters.txt21
-rw-r--r--npc/new_4-1-cave-small/passages.txt (renamed from npc/cave-small/passages.txt)0
-rw-r--r--npc/new_5-1-cave2/chest.txt (renamed from npc/cave2/chest.txt)35
-rw-r--r--npc/new_5-1-cave2/monsters.txt20
-rw-r--r--npc/new_5-1-cave2/passages.txt (renamed from npc/cave1/passages.txt)0
-rw-r--r--npc/new_6-1-arena/guards.txt28
-rw-r--r--npc/new_6-1-arena/monsters.txt14
-rw-r--r--npc/new_6-1-arena/pvpflag.txt (renamed from npc/pvp/maps.txt)2
-rw-r--r--npc/new_7-1-eastern-desert/monsters.txt20
-rw-r--r--npc/new_7-1-eastern-desert/npcs.txt (renamed from npc/eastern-desert/npcs.txt)10
-rw-r--r--npc/new_7-1-eastern-desert/passages.txt21
-rw-r--r--npc/new_8-1-tulimshar/casino.txt172
-rw-r--r--npc/new_8-1-tulimshar/omar.txt6
-rw-r--r--npc/new_8-1-tulimshar/passages.txt28
-rw-r--r--npc/new_8-1-tulimshar/phaet.txt30
-rw-r--r--npc/new_8-1-tulimshar/shops.txt9
-rw-r--r--npc/new_8-1-tulimshar/troupe_leader.txt43
-rw-r--r--npc/new_9-1-woodland/alchemist.txt717
-rw-r--r--npc/new_9-1-woodland/monsters.txt34
-rw-r--r--npc/new_9-1-woodland/oscar.txt1
-rw-r--r--npc/new_9-1-woodland/passages.txt5
-rw-r--r--npc/savepoints/savepoints.txt132
-rw-r--r--npc/snow-village/monsters.txt1
-rw-r--r--npc/snow-village/sexchanger.txt25
-rw-r--r--npc/snow-village/shops.txt38
-rw-r--r--npc/snow-village/startrek.txt17
-rw-r--r--npc/south-east-woodland/monsters.txt2
-rw-r--r--npc/south-east-woodland/passages.txt2
-rw-r--r--npc/south-woodland/monsters.txt3
-rw-r--r--npc/south-woodland/passages.txt2
-rw-r--r--npc/tulimshar-casino/casino.txt406
-rw-r--r--npc/tulimshar/banker.txt1
-rw-r--r--npc/tulimshar/barber.txt113
-rw-r--r--npc/tulimshar/children.txt93
-rw-r--r--npc/tulimshar/guards.txt56
-rw-r--r--npc/tulimshar/guide.txt87
-rw-r--r--npc/tulimshar/man.txt18
-rw-r--r--npc/tulimshar/merchant.txt1
-rw-r--r--npc/tulimshar/monsters.txt32
-rw-r--r--npc/tulimshar/passages.txt2
-rw-r--r--npc/tulimshar/rewards_master.txt181
-rw-r--r--npc/tulimshar/sandra.txt81
-rw-r--r--npc/tulimshar/vincent.txt90
-rw-r--r--npc/western-desert/dark_mage.txt37
-rw-r--r--npc/western-desert/monsters.txt3
-rw-r--r--npc/western-desert/passages.txt5
-rw-r--r--npc/woodland-desert/monsters.txt2
-rw-r--r--npc/woodland-desert/passages.txt2
-rw-r--r--npc/woodland-village/forestbowquest.txt191
-rw-r--r--npc/woodland-village/ironore.txt97
-rw-r--r--npc/woodland-village/monsters.txt2
-rw-r--r--npc/woodland-village/pirate.txt5
-rw-r--r--npc/woodland-village/scythequest.txt64
-rw-r--r--npc/woodland-village/shops.txt76
-rw-r--r--npc/woodland-village/villagers.txt89
-rw-r--r--npc/woodland/alchemist.txt39
-rw-r--r--npc/woodland/monsters.txt2
-rw-r--r--npc/woodland/passages.txt30
-rw-r--r--npc/xmas/monsters.txt2
-rw-r--r--npc/xmas/snowman.txt44
-rw-r--r--npc/xmas/taro.txt13
-rw-r--r--tools/Purger.java319
313 files changed, 11935 insertions, 4191 deletions
diff --git a/changelog.txt b/changelog.txt
index a3462478..35ef899c 100644
--- a/changelog.txt
+++ b/changelog.txt
@@ -101,4 +101,12 @@
04.04.08: * Crush: Added developers cap and crown.
-04.04.10: * Crush: Added savepoint scripts. \ No newline at end of file
+04.04.08: * Crush: Added savepoint scripts.
+
+22.04.08: * Crush: Changed resetter script as discussed on irc.
+
+05.05.08: * Crush: Added clothdyer script (not enabled yet)
+
+21.08.08: * Crush: Two new maps and changes at Tulimshar and Hurnscald by Jaxad
+
+29.08.08: * Crush: Scripts, "monsters" and items for the alchemy system. \ No newline at end of file
diff --git a/conf/atcommand_athena.conf b/conf/atcommand_athena.conf.example
index b0711beb..b0711beb 100644
--- a/conf/atcommand_athena.conf
+++ b/conf/atcommand_athena.conf.example
diff --git a/conf/battle_athena.conf b/conf/battle_athena.conf.example
index 57a6fc0d..1324bd34 100644
--- a/conf/battle_athena.conf
+++ b/conf/battle_athena.conf.example
@@ -54,7 +54,7 @@ monster_skill_add_range: 0
// If a player is attacked, will they have a delay in being able to move? (Note 1)
// (Setting to no will be like always endure)
-player_damage_delay: yes
+player_damage_delay: no
// Damaged delay rate (Note 2)
player_damage_delay_rate: 100
@@ -650,12 +650,12 @@ night_at_start: no
// Define duration in msec of the day (default: 7,200,000 = 2 hours)
// Set to 0 to disable day cycle (but not @day GM command).
// Except 0, minimum is 60000 (1 minute).
-day_duration: 7200000
+day_duration: 0
// Define duration in msec of the night (default: 1,800,000 = 30 min)
// Set to 0 to disable night cycle (but not @night GM command).
// Except 0, minimum is 60000 (1 minute).
-night_duration: 1800000
+night_duration: 0
// Will display a mob's hp/maxhp when the mouse cursor is over them. (Note 1)
// Will not display guardian or emperium hp.
diff --git a/conf/char_athena.conf b/conf/char_athena.conf.example
index 57ee991b..6ce131cf 100644
--- a/conf/char_athena.conf
+++ b/conf/char_athena.conf.example
@@ -2,10 +2,10 @@
// Server Communication username and password.
userid: s1
-passwd: p1
+passwd: s1
// Server name, use alternative character such as ASCII 160 for spaces.
-server_name: Mana World
+server_name: The Mana World
// Wisp name for server: used to send wisp from server to players (between 4 to 23 characters)
wisp_server_name: Server
@@ -89,12 +89,13 @@ name_ignoring_case: 0
// 0: no restriction (default)
// 1: only letters/symbols in 'char_name_letters' option.
// 2: Letters/symbols in 'char_name_letters' option are forbidden. All others are possibles.
-char_name_option: 0
+char_name_option: 1
// Set the letters/symbols that you want use with the 'char_name_option' option.
// Note: add 'space' between 2 others letters/symbols.
// default: void.
-//char_name_letters:
+// char_name_letters: [ ] { } , . | - # @ ! ~ ` ; : " " ? / \ = + < >
+char_name_letters: a b c d e f g h i j k l m n o p r s t q u w x y z A B C D E F G H I J K L M N O P R S T Q U W X Y Z 1 2 3 4 5 6 7 8 9 0
// Filename of the file which receives the online players list in text
online_txt_filename: online.txt
diff --git a/conf/eathena-monitor.conf b/conf/eathena-monitor.conf.example
index 70dcd2e5..70dcd2e5 100644
--- a/conf/eathena-monitor.conf
+++ b/conf/eathena-monitor.conf.example
diff --git a/conf/gm_account.txt b/conf/gm_account.txt.example
index 912e1a09..912e1a09 100644
--- a/conf/gm_account.txt
+++ b/conf/gm_account.txt.example
diff --git a/conf/inter_athena.conf b/conf/inter_athena.conf.example
index 72a88bd9..72a88bd9 100644
--- a/conf/inter_athena.conf
+++ b/conf/inter_athena.conf.example
diff --git a/conf/ladmin_athena.conf b/conf/ladmin_athena.conf.example
index 4f9ce8b6..4f9ce8b6 100644
--- a/conf/ladmin_athena.conf
+++ b/conf/ladmin_athena.conf.example
diff --git a/conf/lan_support.conf b/conf/lan_support.conf.example
index bfaec696..bfaec696 100644
--- a/conf/lan_support.conf
+++ b/conf/lan_support.conf.example
diff --git a/conf/login_athena.conf b/conf/login_athena.conf.example
index 72b820fe..1d4383a7 100644
--- a/conf/login_athena.conf
+++ b/conf/login_athena.conf.example
@@ -50,6 +50,11 @@ login_log_filename: log/login.log
// Name of the file of that logs the unknown packets (for debug or hack check)
login_log_unknown_packets_filename: log/login_unknown_packets.log
+// Update host
+// Tells the client that an alternative updatehost is available if the client
+// supports this. If left out nothing will be sent. max length 127.
+update_host: http://updates.themanaworld.org/
+
// Indicate if the unknown packets are saved or not
//(the unknown packets coming from the char-server or ladministration does not relate to, which is always saved)
// Be careful: if you receive an attack, your hard disk can cause lag...
diff --git a/conf/magic.conf b/conf/magic.conf
new file mode 100644
index 00000000..54f182de
--- /dev/null
+++ b/conf/magic.conf
@@ -0,0 +1,580 @@
+# Special-purpose globals
+obscure_chance = 95
+min_casttime = 200
+
+# Schools of magic
+CONST MAGIC = 340
+CONST LIFE = 341
+CONST WAR = 342
+CONST TRANSMUTE = 343
+CONST NATURE = 344
+CONST ASTRAL = 345
+
+# 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
+
+# Schools of magic
+CONST SC_HALT_REGENERATE = 195
+CONST SC_FLYING_BACKPACK = 196
+CONST SC_MBARRIER = 197
+CONST SC_HASTE = 198
+CONST SC_PHYS_SHIELD = 199
+
+CONST SFX_TELEPORT = 24
+
+# Increase spellpower by school and general magic skill
+PROCEDURE adjust_spellpower(school) =
+ spellpower = spellpower + (skill(caster, MAGIC) + skill(caster, school)) * 10;
+ IF ((school = LIFE) && (target = partner(caster)))
+ THEN spellpower = spellpower + 200; # Do something for wedding rings, too?
+
+PROCEDURE heal(target, max_heal) =
+ sfx(caster, 4, 0);
+ IF caster <> target
+ THEN sfx(target, 4, 0);
+ power = spellpower + vit(caster);
+ power = min(max_heal, (max_heal * power) / 250);
+ itemheal(target, power, 0);
+
+# Goes through instaheal instead of itemheal
+PROCEDURE quickheal(target, power) =
+ sfx(caster, 4, 0);
+ IF caster <> target
+ THEN sfx(target, 4, 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))))
+ THEN ABORT;
+ IF (not (rdistance(location(caster), location(target)) <= attack_range))
+ THEN 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) =
+ d = damage + random(dmgplus);
+ IF (element(target) = malus_elt)
+ THEN d = d / 3;
+ IF (element(target) = bonus_elt)
+ THEN d = (d * (4 + element_level(target))) / 4;
+ #message(caster, "bonus=" + (element(target) = bonus_elt) + " malus=" + (element(target) = malus_elt) + " damage=" + damage + " + r(" + dmgplus + ") -> " + d);
+ sfx(target, effect, 0);
+ injure(caster, target, d, 0);
+
+PROCEDURE melee_damage(target, damage, dmgplus) =
+ CALL attack_check(target);
+ d = damage + random(dmgplus);
+ injure(caster, target, d, 0);
+
+
+PROCEDURE install_attack_spell(charges, base_delay, range, attack_animation) =
+ sfx(caster, 5, 0);
+ attack_range = range;
+ override_attack(caster, charges, ((200 - agi(caster)) * base_delay) / 200,
+ range, 0, attack_animation);
+
+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) =
+ sfx(caster, 2, 0);
+ sfx(location, 21, 0);
+ WAIT delay;
+ sfx(location, 22, 0);
+ spawn(rbox(location, 2), caster, mob_id,
+ if_then_else(skill(caster, ASTRAL) >= control_level, 2, 1), # pets when level is high enough
+ count, lifetime);
+
+#--------------------------------------------------------------------------------
+# Level 0 spells
+#--------------------------------------------------------------------------------
+
+#SPELL reset : "#reset" =
+# EFFECT { skill 340, 0;
+# skill 341, 0;
+# skill 342, 0;
+# skill 343, 0;
+# skill 344, 0;
+# skill 345, 0;
+# }
+
+SPELL lesser-heal (target : STRING) : "#imx" =
+ LET level = 0
+ school = LIFE
+ IN (MANA 5, CASTTIME 400,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE if_then_else(failed(pc(target)), 1,
+ rdistance(location(caster), location(pc(target))) < 2 + (spellpower / 50)),
+ (COMPONENTS ["MaggotSlime"] OR COMPONENTS ["BugLeg"]))
+ => EFFECT CALL adjust_spellpower(school);
+ IF failed(pc(target))
+ THEN target = caster; # quest handling goes here
+ ELSE target = pc(target);
+ CALL heal(target, 200);
+
+
+SPELL flare-dart : "#fla" =
+ LET level = 0
+ school = WAR
+ IN (MANA 15, CASTTIME 500,
+ REQUIRE skill(caster, MAGIC) > level,
+ (REQUIRE skill(caster, school) > 2 OR COMPONENTS ["SulphurPowder"]))
+ => EFFECT CALL adjust_spellpower(school);
+ sfx(caster, 5, 0);
+ damage = min(40 + skill(caster, school) * 20,
+ 10 + spellpower);
+ damage_bonus = 5 + level(caster) / 3;
+ CALL install_attack_spell(3 + spellpower / 30,
+ 1200,
+ 4, 31);
+
+ ATTRIGGER CALL attack_check(target);
+ CALL elt_damage (target, damage, damage_bonus, ELT_WATER, ELT_FIRE, 15);
+
+SPELL magic-blade : "#mbl" =
+ LET level = 0
+ school = WAR
+ IN (MANA 12, CASTTIME 500,
+ REQUIRE skill(caster, MAGIC) > level)
+ => ( COMPONENTS ["SharpKnife"] =>
+ EFFECT CALL adjust_spellpower(WAR);
+ sfx(caster, 5, 0);
+ CALL install_melee_spell(10 + spellpower / 10, 900, 30);
+ ATTRIGGER CALL melee_damage(target, 60 + spellpower / 20, 5 + str(caster));
+ | COMPONENTS ["Knife"] =>
+ EFFECT CALL adjust_spellpower(WAR);
+ sfx(caster, 5, 0);
+ CALL install_melee_spell(10 + spellpower / 10, 900, 30);
+ ATTRIGGER CALL melee_damage(target, 40 + spellpower / 20, 5 + str(caster));
+ )
+
+SPELL aggravate : "#qaw" =
+ LET level = 0
+ school = NATURE
+ IN (MANA 5, CASTTIME 300,
+ REQUIRE skill(caster, MAGIC) > level)
+ => EFFECT CALL adjust_spellpower(school);
+ sfx(caster, 2, 0);
+ FOREACH MOB target IN rbox(location(caster), 1 + spellpower / 20) DO
+ (sfx(target, 2, 0);
+ aggravate(target, 0, caster);)
+
+
+LOCAL SPELL summon-maggots : "#kbm" =
+ LET level = 0
+ school = ASTRAL
+ IN (MANA 20, CASTTIME 3000,
+ REQUIRE skill(caster, MAGIC) > level,
+ COMPONENTS ["MaggotSlime"])
+ => EFFECT CALL adjust_spellpower(school);
+ CALL summon_spell(1002, 3 + spellpower / 15, 5000 - (spellpower * 10), spellpower * 500, 1);
+
+
+#--------------------------------------------------------------------------------
+# Level 1 spells
+#--------------------------------------------------------------------------------
+
+SPELL make-arrows : "#mkarrows" =
+ LET level = 1
+ school = TRANSMUTE
+ IN (MANA 20, CASTTIME 2000,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level,
+ COMPONENTS ["RawLog"])
+ => EFFECT CALL adjust_spellpower(school);
+ sfx(caster, 2, 0);
+ create_item(caster, "Arrow", 1 + spellpower / 15);
+
+SPELL make-shirt : "#mkshirt" =
+ LET level = 1
+ school = TRANSMUTE
+ IN (MANA 20, CASTTIME 2000,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level,
+ COMPONENTS [5 * "CottonCloth"])
+ => EFFECT CALL adjust_spellpower(school);
+ sfx(caster, 2, 0);
+ create_item(caster, "CottonShirt", 1);
+
+SPELL make-tanktop : "#mktanktop" =
+ LET level = 1
+ school = TRANSMUTE
+ IN (MANA 20, CASTTIME 2000,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level,
+ COMPONENTS [4 * "CottonCloth"])
+ => EFFECT CALL adjust_spellpower(school);
+ sfx(caster, 2, 0);
+ create_item(caster, "TanktopWhite", 1);
+
+SPELL make-short-tanktop : "#mkshorttanktop" =
+ LET level = 1
+ school = TRANSMUTE
+ IN (MANA 20, CASTTIME 2000,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level,
+ COMPONENTS [3 * "CottonCloth"])
+ => EFFECT CALL adjust_spellpower(school);
+ sfx(caster, 2, 0);
+ create_item(caster, "ShortTanktopWhite", 1);
+
+SPELL lightning-strike : "#kig" =
+ LET level = 1
+ school = WAR
+ IN (MANA 25, CASTTIME 1000,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level,
+ (REQUIRE skill(caster, school) > 3 OR COMPONENTS ["IronPowder"]))
+ => EFFECT CALL adjust_spellpower(school);
+ damage = min(100 + skill(caster, school) * 50,
+ 50 + spellpower * 2);
+ damage_bonus = level(caster) + spellpower;
+ CALL install_attack_spell(1 + spellpower / 60,
+ 3000,
+ 8, 31);
+ ATTRIGGER CALL attack_check(target);
+ CALL elt_damage (target, damage, damage_bonus, ELT_EARTH, ELT_WIND, 17 + random(3));
+
+SPELL fire-ball : "#pof" =
+ LET level = 1
+ school = WAR
+ IN (MANA 30, CASTTIME 1000,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level,
+ (REQUIRE skill(caster, school) > 3 OR COMPONENTS ["PileOfAsh"]))
+ => EFFECT CALL adjust_spellpower(school);
+ damage = min(50 + skill(caster, school) * 40,
+ 30 + ((spellpower * 3) / 2));
+ damage_bonus = level(caster) + spellpower * 2;
+ radius = 2 + spellpower / 50;
+ CALL install_attack_spell(1 + spellpower / 60,
+ 5000,
+ 10, 31);
+ ATTRIGGER CALL attack_check(target);
+ loc = location(target);
+ #WAIT 500;
+ sfx(loc, 16, 0);
+ FOREACH TARGET target IN rbox(loc, radius)
+ DO IF line_of_sight(loc, location(target))
+ THEN (divisor = (3 + rdistance(loc, location(target)));
+ CALL elt_damage (target, (damage * 3) / divisor, (damage_bonus * 3) / divisor, ELT_WATER, ELT_FIRE, 15);
+ )
+
+SPELL magic-knuckles (target : PC) : "#iom" =
+ LET level = 1
+ school = WAR
+ IN (MANA 20, CASTTIME 500,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level,
+ (REQUIRE skill(caster, school) > 3 OR COMPONENTS ["Beer"]))
+ =>
+ EFFECT CALL adjust_spellpower(WAR);
+ str = str(target);
+ CALL install_melee_spell(10 + spellpower / 12, 1000, 0);
+ ATTRIGGER CALL melee_damage(target, 40 + (str / 2) + spellpower / 20, 5 + str);
+
+SPELL flying-backpack (target : PC) : "#uuy" =
+ LET level = 1
+ school = NATURE
+ IN (MANA 12, CASTTIME 1000,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level,
+ REQUIRE rdistance(location(target), location(caster)) < 2 + spellpower / 30)
+ => EFFECT CALL adjust_spellpower(school);
+ sfx(target, 3, 0);
+ IF (caster <> target)
+ THEN sfx(caster, 2, 0);
+ status_change(target, SC_FLYING_BACKPACK, 0, 0, 0, 0, 5000 + (spellpower * 500));
+ message (target, "Your backpack is lifted by a mystical force; you no longer feel it pressing on your back.");
+ ATEND message (target, "Your backpack is no longer levitating.");
+ sfx(target, 2, 0);
+
+
+SPELL protect (target : PC) : "#ism" =
+ LET level = 1
+ school = NATURE
+ IN (MANA 18, CASTTIME 1000,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level,
+ (REQUIRE skill(caster, school) > 3 OR COMPONENTS ["HardSpike"]),
+ REQUIRE rdistance(location(target), location(caster)) < 2 + spellpower / 30)
+ => EFFECT CALL adjust_spellpower(school);
+ sfx(target, 11, 0);
+ IF (caster <> target)
+ THEN sfx(caster, 2, 0);
+ status_change(target, SC_PHYS_SHIELD, 5 + max(15, spellpower / 12), 0, 0, 0, 5000 + (spellpower * 500));
+ message (target, "You feel more protected.");
+ ATEND message (target, "You feel less protected.");
+ sfx(target, 111, 0);
+
+
+LOCAL SPELL rain : "#flosh" =
+ LET level = 1
+ school = NATURE
+ IN (MANA 20, CASTTIME 3000,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level,
+ (REQUIRE skill(caster, school) > 3 OR COMPONENTS ["BottleOfWater"]))
+ => EFFECT CALL adjust_spellpower(school);
+ sfx(caster, 2, 0);
+ area = rbox(location(caster), 3 + spellpower / 30);
+ FOR i = 0 TO spellpower DO (
+ FOR j = 0 TO spellpower / 100 DO (
+ location = random_location(area);
+ sfx(location, 25, 0);
+ FOREACH TARGET target IN rbox(location, 1) DO
+ IF element(target) = ELT_FIRE
+ THEN injure(caster, target, 5 + random(5 + spellpower / 10), 0);
+ )
+ WAIT 300 - min(spellpower, 200) + random(100);
+ );
+
+SPELL happy-curse (target : PC) : "#happy" =
+ LET level = 1
+ school = NATURE
+ IN (MANA 10, CASTTIME 1000,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level,
+ (REQUIRE skill(caster, school) > 3 OR COMPONENTS ["WhiteFur"]),
+ REQUIRE rdistance(location(target), location(caster)) < 1 + spellpower / 100)
+ => EFFECT CALL adjust_spellpower(school);
+ FOR i = 0 TO (spellpower / 10) DO (emote(target, 3); WAIT 500;);
+
+SPELL barrier (target : PC) : "#iso" =
+ LET level = 1
+ school = NATURE
+ IN (MANA 18, CASTTIME 1000,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level,
+ (REQUIRE skill(caster, school) > 3 OR COMPONENTS ["HardSpike"]),
+ REQUIRE rdistance(location(target), location(caster)) < 2 + spellpower / 30)
+ => EFFECT CALL adjust_spellpower(school);
+ sfx(target, 3, 0);
+ IF (caster <> target)
+ THEN sfx(caster, 2, 0);
+ status_change(target, SC_MBARRIER, 30 + max(30, spellpower / 8), 0, 0, 0, 2000 + (spellpower * 200));
+ message (target, "You are surrounded by a magical barrier.");
+ ATEND message (target, "Your magical barrier disspiates.");
+ sfx(target, 2, 0);
+
+
+LOCAL SPELL summon-scorps : "#kbms" =
+ LET level = 1
+ school = ASTRAL
+ IN (MANA 25, CASTTIME 3000,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level,
+ COMPONENTS ["ScorpionStinger"])
+ => EFFECT CALL adjust_spellpower(school);
+ sfx(target, 2, 0);
+ CALL summon_spell(1003, 1 + spellpower / 30, 5000 - (spellpower * 9), spellpower * 400, 2);
+
+LOCAL SPELL summon-red-scorps : "#kbmq" =
+ LET level = 1
+ school = ASTRAL
+ IN (MANA 30, CASTTIME 3000,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level,
+ COMPONENTS ["RedScorpionStinger"])
+ => EFFECT CALL adjust_spellpower(school);
+ sfx(target, 2, 0);
+ CALL summon_spell(1004, 1 + spellpower / 40, 5000 - (spellpower * 8), spellpower * 350, 3);
+
+
+SPELL detect-players : "#ewm" =
+ LET level = 1
+ school = MAGIC
+ IN (MANA 10, CASTTIME 300,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level)
+ => EFFECT CALL adjust_spellpower(school);
+ sfx(target, 2, 0);
+ message = "";
+ FOREACH PC target IN rbox(location(caster), spellpower / 2)
+ DO IF target <> caster
+ THEN (IF message <> ""
+ THEN message = message + ", ";
+ message = message + name_of (target);
+ IF spellpower > 99
+ THEN message = message + "(" + level(target) + ")";
+ )
+ IF message = ""
+ THEN message(caster, "You sense no-one else nearby.");
+ ELSE message(caster, "You sense the following: " + message);
+
+
+
+SPELL lay-on-hands (target : STRING) : "#loh" =
+ LET level = 1
+ school = LIFE
+ IN (MANA 8, CASTTIME 400,
+ REQUIRE hp(caster) > max_hp(caster) / 20,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE if_then_else(failed(pc(target)), 1,
+ (rdistance(location(caster),
+ location(pc(target))) < 2 + (spellpower / 50))
+ && not (running_status_update(pc(target), SC_HALT_REGENERATE))
+ ))
+ => EFFECT CALL adjust_spellpower(school);
+ IF failed(pc(target))
+ THEN target = caster; # quest handling goes here
+ ELSE target = pc(target);
+ needed = max_hp(target) - hp(target);
+ pay_fraction = max(80, 200 - (vit(caster) + (spellpower / 10))); # Pay at least 40%
+ payment = (needed * pay_fraction) / 200;
+ available = hp(caster) - (max_hp(caster) / 20);
+
+ IF payment < available
+ THEN power = needed;
+ ELSE (payment = available;
+ power = (available * 200) / pay_fraction;
+ )
+
+ instaheal(caster, 0 - payment, 0);
+ CALL quickheal(target, power);
+ status_change(caster, SC_HALT_REGENERATE, 0, 0, 0, 0, 10000);
+
+#--------------------------------------------------------------------------------
+# Level 2 spells
+#--------------------------------------------------------------------------------
+
+SPELL summon-partner : "#aid" =
+ LET level = 2
+ school = ASTRAL
+ IN (MANA 30, CASTTIME 2000,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level,
+ REQUIRE is_married(caster))
+ => EFFECT CALL adjust_spellpower(school);
+ sfx(caster, 2, 0);
+ IF (failed (partner (caster)))
+ THEN message (caster, "You call out for your partner, but there is no response.");
+ ELSE (message (caster, "You call out for " + (name_of (partner (caster))) + ".");
+ message (partner(caster), name_of(caster) + " is calling for your aid!");
+ sfx(partner(caster), 2, 0);
+ WAIT (max (5000, 30000 - (spellpower * 60)));
+ IF (failed (partner (caster)))
+ THEN message (caster, "Your partner has abandoned you.");
+ ELSE (sfx(location(partner(caster)), SFX_TELEPORT, 0);
+ dest = awayfrom(location(caster), random_dir(1), 1);
+ warp(partner(caster), dest);
+ sfx(dest, SFX_TELEPORT, 0);
+ )
+ )
+
+
+
+#--------------------------------------------------------------------------------
+# Level 4 spells
+#--------------------------------------------------------------------------------
+
+SPELL shroud : "#aw" =
+ LET level = 4
+ school = ASTRAL
+ IN (MANA 40, CASTTIME 400,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level)
+ => EFFECT sfx(caster, 2, 0);
+ shroud(caster, 0x04);
+
+#--------------------------------------------------------------------------------
+# Special-purpose quasispells
+#--------------------------------------------------------------------------------
+
+CONST MIN_MARRY_LEVEL = 32;
+
+SILENT SPELL marriage (target : PC) : "marry" =
+ (REQUIRE is_in(location(caster), @("new_29-1.gat", 28,39) @+ (8, 6)))=>
+ EFFECT IF target == caster # no valid target or tried to marry self?
+ THEN ABORT;
+
+ IF (level(caster) < MIN_MARRY_LEVEL)
+ THEN (message(caster, "You must be level " + MIN_MARRY_LEVEL + " or higher to marry!"); ABORT;)
+
+ IF (level(target) < MIN_MARRY_LEVEL)
+ THEN (message(caster, "Your partner must be level " + MIN_MARRY_LEVEL + " or higher to marry!"); ABORT;)
+
+ IF partner(caster) = target
+ THEN (message(caster, "You and " + name_of(target) + " are already married."); ABORT;)
+
+ IF is_married(caster)
+ THEN (message(caster, "You are already married!"); ABORT;)
+
+ IF is_married(target)
+ THEN (message(caster, name_of(target) + " is already married."); ABORT;);
+
+ IF distance(location(caster), location(target)) <> 1
+ THEN (message(caster, "You have to stand next to each other."); ABORT;);
+
+ IF (count_item(caster, "WeddingRing") == 0 || count_item(target, "WeddingRing") == 0)
+ THEN (message(caster, "You must both be wearing your wedding rings!"); ABORT;)
+
+ script_target = target;
+ {
+ 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.", -;
+ close;
+
+ L_yes:
+ if marriage(@caster_name$)
+ announce @caster_name$ + " and " + strcharinfo(0) + " are now married!", 0;
+ }
+
+ IF not (is_married(caster))
+ THEN message(caster, name_of(target) + " turned down your marriage offer.");
+
+SPELL change-hair-colour (colour : STRING) : "trapa" =
+ (MANA 20) => EFFECT IF colour = "nworbl"
+ THEN x = 0; # light brown
+ ELSE IF colour = "der"
+ THEN x = 1; # red
+ ELSE IF colour = "neerg"
+ THEN x = 2; # green
+ ELSE IF colour = "elprup"
+ THEN x = 3; # purple
+ ELSE IF colour = "yerg"
+ THEN x = 4; # grey
+ ELSE IF colour = "wolley"
+ THEN x = 5; # yellow
+ ELSE IF colour = "eulb"
+ THEN x = 6; # blue
+ ELSE IF colour = "nwrob"
+ THEN x = 7; # brown
+ ELSE IF colour = "elpropl"
+ THEN x = 8; # light purple
+ ELSE IF colour = "elpropd"
+ THEN x = 9; # dark purple
+ ELSE x = random(10);
+ sfx(caster, 2, 0);
+ set_hair_colour(caster, x);
+
+SPELL trick-or-treat : "trick-or-treat" =
+ (CASTTIME 30000, MANA 20,
+ COMPONENTS [ "BugLeg" ]) => EFFECT IF (random(2))
+ THEN (sfx(caster, 2, 0);
+ FOR i = 0 TO random(10) DO
+ drop_item_for (random_location(rbox(location(caster), 5)),
+ "Candy", 1, 10000 + random(10000), caster, 3000);
+ FOR i = 0 TO random(10) DO
+ drop_item_for (random_location(rbox(location(caster), 5)),
+ "ChocolateBar", 1, 10000 + random(10000), caster, 3000);
+ )
+ ELSE (sfx(caster, 5, 0);
+ message(caster, "No treat for you!");
+ spawn(rbox(location(caster), 3), caster, 1010, 0, 1 + random(3), 10000 + random(20000));
+ FOREACH MOB target IN rbox(location(caster), 5) DO
+ (sfx(target, 5, 0);
+ aggravate(target, 0, caster);)) \ No newline at end of file
diff --git a/conf/map_athena.conf b/conf/map_athena.conf
deleted file mode 100644
index 8457e450..00000000
--- a/conf/map_athena.conf
+++ /dev/null
@@ -1,209 +0,0 @@
-// eAthena Map-Server Configuration File
-
-// Interserver communication passwords, set in account.txt (or equiv.)
-userid: s1
-passwd: p1
-
-// Character Server IP
-char_ip:81.161.192.4
-// Character Server Port
-char_port: 6122
-
-// Map Server IP
-map_ip:81.161.192.4
-// Map Server Port
-map_port: 5122
-
-// Database autosave time, in seconds.
-autosave_time: 60
-
-// Message of the day file, when a character logs on, this message is displayed.
-motd_txt: conf/motd.txt
-
-// When @help or @h is typed when you are a gm, this is displayed for helping new gms understand gm commands.
-help_txt: conf/help.txt
-
-mapreg_txt: save/mapreg.txt
-
-// import: conf/import/map_conf.txt
-
-// Maps
-
-map: new_25-1.gat
-map: new_24-1.gat
-map: new_23-1.gat
-map: new_22-1.gat
-map: new_21-1.gat
-map: new_20-1.gat
-map: new_19-1.gat
-map: new_18-1.gat
-map: new_17-1.gat
-map: new_16-1.gat
-map: new_15-1.gat
-map: new_14-1.gat
-map: new_13-1.gat
-map: new_12-1.gat
-map: new_11-1.gat
-map: new_10-1.gat
-map: new_9-1.gat
-map: new_8-1.gat
-map: new_7-1.gat
-map: new_6-1.gat
-map: new_5-1.gat
-map: new_4-1.gat
-map: new_3-1.gat
-map: new_2-1.gat
-map: new_1-1.gat
-
-// PVP
-
-npc: npc/pvp/maps.txt
-
-// NPCs (ordered in alphabetical order by name).
-
-// Tulimshar 3-1
-npc: npc/tulimshar/banker.txt
-npc: npc/tulimshar/barber.txt
-npc: npc/tulimshar/children.txt
-npc: npc/tulimshar/elanore.txt
-npc: npc/tulimshar/guards.txt
-npc: npc/tulimshar/guide.txt
-npc: npc/tulimshar/man.txt
-npc: npc/tulimshar/merchant.txt
-npc: npc/tulimshar/monster_guide.txt
-npc: npc/tulimshar/monsters.txt
-npc: npc/tulimshar/passages.txt
-npc: npc/tulimshar/rewards_master.txt
-npc: npc/tulimshar/sandra.txt
-npc: npc/tulimshar/vincent.txt
-
-// Tulimshar casino 8-1
-npc: npc/tulimshar-casino/casino.txt
-
-// Western desert 1-1
-// npc: npc/western-desert/dark_mage.txt
-npc: npc/western-desert/merchant.txt
-npc: npc/western-desert/monsters.txt
-npc: npc/western-desert/nomads.txt
-npc: npc/western-desert/passages.txt
-
-// Eastern desert 7-1
-npc: npc/eastern-desert/monsters.txt
-npc: npc/eastern-desert/passages.txt
-npc: npc/eastern-desert/npcs.txt
-
-// Eastern desert pass 24-1 / 25-1
-npc: npc/eastern-desert-pass/monsters.txt
-npc: npc/eastern-desert-pass/passages.txt
-npc: npc/eastern-desert-pass/npcs.txt
-
-// Woodland 9-1
-npc: npc/woodland/alchemist.txt
-npc: npc/woodland/monsters.txt
-npc: npc/woodland/passages.txt
-
-// South-woodland 14-1
-npc: npc/south-woodland/monsters.txt
-npc: npc/south-woodland/passages.txt
-
-// Cave level 1 2-1
-npc: npc/cave1/miners.txt
-npc: npc/cave1/monsters.txt
-npc: npc/cave1/passages.txt
-
-// Cave level 2 (Underground Palace) 5-1
-npc: npc/cave2/chest.txt
-npc: npc/cave2/monsters.txt
-npc: npc/cave2/passages.txt
-
-// Xmas snow map 10-1
-npc: npc/xmas/monsters.txt
-npc: npc/xmas/passages.txt
-//npc: npc/xmas/santa.txt
-npc: npc/xmas/snowman.txt
-npc: npc/xmas/taro.txt
-
-// Snow village 11-1
-//npc: npc/snow-village/monsters.txt
-npc: npc/snow-village/sexchanger.txt
-npc: npc/snow-village/shops.txt
-npc: npc/snow-village/startrek.txt
-npc: npc/snow-village/passages.txt
-
-// Ice cave 12-1
-npc: npc/ice-cave/monsters.txt
-npc: npc/ice-cave/passages.txt
-
-// Small cave 4-1
-npc: npc/cave-small/hermit.txt
-npc: npc/cave-small/monsters.txt
-npc: npc/cave-small/passages.txt
-
-// Woodland-desert link 15-1
-npc: npc/woodland-desert/monsters.txt
-npc: npc/woodland-desert/passages.txt
-
-// South-west woodland 16-1
-npc: npc/south-east-woodland/monsters.txt
-npc: npc/south-east-woodland/passages.txt
-
-// Big cave 17-1
-npc: npc/cave-big/monsters.txt
-npc: npc/cave-big/passages.txt
-
-// Arena 6-1
-npc: npc/arena/guards.txt
-npc: npc/arena/monsters.txt
-
-// Woodland village 19-1
-npc: npc/woodland-village/monsters.txt
-npc: npc/woodland-village/passages.txt
-npc: npc/woodland-village/pirate.txt
-npc: npc/woodland-village/villagers.txt
-npc: npc/woodland-village/shops.txt
-npc: npc/woodland-village/forestbowquest.txt
-npc: npc/woodland-village/scythequest.txt
-npc: npc/woodland-village/ironore.txt
-
-//Dimonds Cove
-npc: npc/dimonds-cove/passages.txt
-npc: npc/dimonds-cove/dimonds.txt
-npc: npc/dimonds-cove/doug.txt
-npc: npc/dimonds-cove/workers.txt
-
-// Christmas 2006
-//npc: npc/xmas/xmas1.txt
-//npc: npc/xmas/xmas2.txt
-//npc: npc/xmas/xmas3.txt
-//npc: npc/xmas/xmas4.txt
-//npc: npc/xmas/xmas5.txt
-//npc: npc/xmas/xmas6.txt
-//npc: npc/xmas/xmas7.txt
-//npc: npc/xmas/xmas8.txt
-//npc: npc/xmas/xmas9.txt
-//npc: npc/xmas/xmas10.txt
-//npc: npc/xmas/xmas11.txt
-//npc: npc/xmas/xmas12.txt
-//npc: npc/xmas/xmas13.txt
-//npc: npc/xmas/xmas14.txt
-//npc: npc/xmas/xmas15.txt
-//npc: npc/xmas/xmas16.txt
-//npc: npc/xmas/xmas17.txt
-//npc: npc/xmas/xmas18.txt
-//npc: npc/xmas/xmas19.txt
-//npc: npc/xmas/xmas20.txt
-
-// Halloween 2007
-//npc: npc/halloween/2007/monsters.txt
-//npc: npc/halloween/2007/summon.txt
-
-// Christmas 2007
-//npc: npc/xmas2007/pre-xmas.txt
-//npc: npc/xmas2007/after-xmas.txt
-
-// Easter 2008
-//npc: npc/easter2008/monsters.txt
-//npc: npc/easter2008/npc.txt
-
-//Savepoints
-npc: npc/savepoints/savepoints.txt
diff --git a/conf/map_athena.conf.example b/conf/map_athena.conf.example
new file mode 100644
index 00000000..2b5da330
--- /dev/null
+++ b/conf/map_athena.conf.example
@@ -0,0 +1,348 @@
+// eAthena Map-Server Configuration File
+
+// Interserver communication passwords, set in account.txt (or equiv.)
+userid: s1
+passwd: p1
+
+// Character Server IP
+char_ip:81.161.192.4
+// Character Server Port
+char_port: 6122
+
+// Map Server IP
+map_ip:81.161.192.4
+// Map Server Port
+map_port: 5122
+
+// Database autosave time, in seconds.
+autosave_time: 60
+
+// Message of the day file, when a character logs on, this message is displayed.
+motd_txt: conf/motd.txt
+
+// When @help or @h is typed when you are a gm, this is displayed for helping new gms understand gm commands.
+help_txt: conf/help.txt
+
+mapreg_txt: save/mapreg.txt
+
+// import: conf/import/map_conf.txt
+
+// Maps
+
+map: new_39-1.gat
+map: new_38-1.gat
+map: new_37-1.gat
+map: new_36-1.gat
+map: new_35-1.gat
+map: new_34-1.gat
+map: new_33-1.gat
+map: new_32-1.gat
+map: new_31-1.gat
+map: new_30-1.gat
+map: new_29-1.gat
+map: new_28-1.gat
+map: new_27-1.gat
+map: new_26-1.gat
+map: new_25-1.gat
+map: new_24-1.gat
+map: new_23-1.gat
+map: new_22-1.gat
+map: new_21-1.gat
+map: new_20-1.gat
+map: new_19-1.gat
+map: new_18-1.gat
+map: new_17-1.gat
+map: new_16-1.gat
+map: new_15-1.gat
+map: new_14-1.gat
+map: new_13-1.gat
+map: new_12-1.gat
+map: new_11-1.gat
+map: new_10-1.gat
+map: new_9-1.gat
+map: new_8-1.gat
+map: new_7-1.gat
+map: new_6-1.gat
+map: new_5-1.gat
+map: new_4-1.gat
+map: new_3-1.gat
+map: new_2-1.gat
+map: new_1-1.gat
+
+// NPC Functions
+npc: npc/functions/banker.txt
+npc: npc/functions/barber.txt
+npc: npc/functions/game_rules.txt
+npc: npc/functions/inn.txt
+npc: npc/functions/mob_points.txt
+npc: npc/functions/process_equip.txt
+npc: npc/functions/slot_machine.txt
+npc: npc/functions/soul_menhir.txt
+
+// NPCs (ordered by map number).
+
+// new_1-1 Western desert
+// npc: npc/western-desert/dark_mage.txt
+npc: npc/new_1-1-western-desert/rogue.txt
+npc: npc/new_1-1-western-desert/merchant.txt
+npc: npc/new_1-1-western-desert/monsters.txt
+npc: npc/new_1-1-western-desert/nomads.txt
+npc: npc/new_1-1-western-desert/passages.txt
+
+// new-2_1 Cave level 1
+npc: npc/new_2-1-cave1/miners.txt
+npc: npc/new_2-1-cave1/monsters.txt
+npc: npc/new_2-1-cave1/passages.txt
+
+// new_3-1 Tulimshar
+npc: npc/new_3-1-tulimshar/banker.txt
+npc: npc/new_3-1-tulimshar/barber.txt
+npc: npc/new_3-1-tulimshar/bard.txt
+npc: npc/new_3-1-tulimshar/bleacher.txt
+npc: npc/new_3-1-tulimshar/children.txt
+npc: npc/new_3-1-tulimshar/constable.txt
+npc: npc/new_3-1-tulimshar/elanore.txt
+npc: npc/new_3-1-tulimshar/guards.txt
+npc: npc/new_3-1-tulimshar/guide.txt
+npc: npc/new_3-1-tulimshar/man.txt
+npc: npc/new_3-1-tulimshar/merchant.txt
+npc: npc/new_3-1-tulimshar/monster_guide.txt
+npc: npc/new_3-1-tulimshar/monsters.txt
+npc: npc/new_3-1-tulimshar/passages.txt
+npc: npc/new_3-1-tulimshar/rewards_master.txt
+npc: npc/new_3-1-tulimshar/rules.txt
+npc: npc/new_3-1-tulimshar/sandra.txt
+npc: npc/new_3-1-tulimshar/vincent.txt
+npc: npc/new_3-1-tulimshar/soul-menhir.txt
+npc: npc/new_3-1-tulimshar/workers.txt
+
+// new_4-1 Small bat cave
+npc: npc/new_4-1-cave-small/hermit.txt
+npc: npc/new_4-1-cave-small/monsters.txt
+npc: npc/new_4-1-cave-small/passages.txt
+
+// new_5-1 Cave level 2 (Underground Palace)
+npc: npc/new_5-1-cave2/chest.txt
+npc: npc/new_5-1-cave2/monsters.txt
+npc: npc/new_5-1-cave2/passages.txt
+
+// new_6-1 Arena
+npc: npc/new_6-1-arena/guards.txt
+npc: npc/new_6-1-arena/monsters.txt
+npc: npc/new_6-1-arena/pvpflag.txt
+
+// new_7-1 Eastern desert
+npc: npc/new_7-1-eastern-desert/monsters.txt
+npc: npc/new_7-1-eastern-desert/passages.txt
+npc: npc/new_7-1-eastern-desert/npcs.txt
+
+// new_8-1 Tulimshar indoor
+npc: npc/new_8-1-tulimshar/casino.txt
+npc: npc/new_8-1-tulimshar/omar.txt
+npc: npc/new_8-1-tulimshar/passages.txt
+npc: npc/new_8-1-tulimshar/phaet.txt
+npc: npc/new_8-1-tulimshar/shops.txt
+npc: npc/new_8-1-tulimshar/troupe_leader.txt
+
+// new_9-1 Woodland
+npc: npc/new_9-1-woodland/alchemist.txt
+npc: npc/new_9-1-woodland/monsters.txt
+npc: npc/new_9-1-woodland/passages.txt
+npc: npc/new_9-1-woodland/oscar.txt
+
+// new_10-1 Xmas snow map
+npc: npc/new_10-1-xmas/monsters.txt
+npc: npc/new_10-1-xmas/passages.txt
+// npc: npc/new_10-1-xmas/santa.txt
+npc: npc/new_10-1-xmas/snowman.txt
+npc: npc/new_10-1-xmas/taro.txt
+
+// new_11-1 Snow village
+// npc: npc/new_11-1-snow-village/monsters.txt
+npc: npc/new_11-1-snow-village/sexchanger.txt
+npc: npc/new_11-1-snow-village/startrek.txt
+npc: npc/new_11-1-snow-village/passages.txt
+npc: npc/new_11-1-snow-village/soul-menhir.txt
+npc: npc/new_11-1-snow-village/amrak.txt
+
+// new_12-1 Ice cave
+npc: npc/new_12-1-ice-cave/monsters.txt
+npc: npc/new_12-1-ice-cave/passages.txt
+
+// new_13-1 Snow village shops.
+npc: npc/new_13-1-snow-village-shops/shops.txt
+npc: npc/new_13-1-snow-village-shops/passages.txt
+npc: npc/new_13-1-snow-village-shops/furquest.txt
+
+// new_14-1 South-woodland
+npc: npc/new_14-1-south-woodland/monsters.txt
+npc: npc/new_14-1-south-woodland/passages.txt
+
+// new_15-1 Woodland-desert link
+npc: npc/new_15-1-woodland-desert/monsters.txt
+npc: npc/new_15-1-woodland-desert/passages.txt
+
+// new_16-1 South-west woodland
+npc: npc/new_16-1-south-east-woodland/monsters.txt
+npc: npc/new_16-1-south-east-woodland/passages.txt
+
+// new_17-1 Big cave
+npc: npc/new_17-1-cave-big/monsters.txt
+npc: npc/new_17-1-cave-big/passages.txt
+
+// new_18-1 Woodland village surroundings
+npc: npc/new_18-1-woodland-village/monsters.txt
+npc: npc/new_18-1-woodland-village/passages.txt
+npc: npc/new_18-1-woodland-village/george.txt
+npc: npc/new_18-1-woodland-village/hinnak.txt
+
+// new_19-1 Woodland village
+npc: npc/new_19-1-woodland-village/jack.txt
+npc: npc/new_19-1-woodland-village/milly.txt
+npc: npc/new_19-1-woodland-village/old_man.txt
+npc: npc/new_19-1-woodland-village/old_woman.txt
+npc: npc/new_19-1-woodland-village/passages.txt
+npc: npc/new_19-1-woodland-village/sabine.txt
+npc: npc/new_19-1-woodland-village/soul-menhir.txt
+
+// new_20-1 Woodland village indoor
+npc: npc/new_20-1-woodland-village/alan.txt
+npc: npc/new_20-1-woodland-village/doctor.txt
+npc: npc/new_20-1-woodland-village/drunks.txt
+npc: npc/new_20-1-woodland-village/inspector.txt
+npc: npc/new_20-1-woodland-village/kfahr.txt
+npc: npc/new_20-1-woodland-village/misc.txt
+npc: npc/new_20-1-woodland-village/nicholas.txt
+npc: npc/new_20-1-woodland-village/nurse.txt
+npc: npc/new_20-1-woodland-village/passages.txt
+npc: npc/new_20-1-woodland-village/richard.txt
+npc: npc/new_20-1-woodland-village/selim.txt
+npc: npc/new_20-1-woodland-village/shops.txt
+npc: npc/new_20-1-woodland-village/waitress.txt
+
+// new_21-1 Ice cave 2
+npc: npc/new_21-1-ice-cave2/monsters.txt
+npc: npc/new_21-1-ice-cave2/passages.txt
+
+// new_22-1 Snake cave
+npc: npc/new_22-1-snake-cave/monsters.txt
+npc: npc/new_22-1-snake-cave/passages.txt
+
+// new_23-1 Dimonds Cove
+npc: npc/new_23-1-dimonds-cove/passages.txt
+npc: npc/new_23-1-dimonds-cove/dimonds.txt
+npc: npc/new_23-1-dimonds-cove/doug.txt
+npc: npc/new_23-1-dimonds-cove/loratay.txt
+npc: npc/new_23-1-dimonds-cove/workers.txt
+
+// new_24-1 Eastern desert mountain passage
+npc: npc/new_24-1-eastern-desert-mountain-passage/mika.txt
+npc: npc/new_24-1-eastern-desert-mountain-passage/monsters.txt
+npc: npc/new_24-1-eastern-desert-mountain-passage/pachua.txt
+npc: npc/new_24-1-eastern-desert-mountain-passage/passages.txt
+
+// new_25-1 Eastern desert cave
+npc: npc/new_25-1-eastern-desert-cave/monsters.txt
+npc: npc/new_25-1-eastern-desert-cave/passages.txt
+
+// new_26-1 Forest Hill 1
+npc: npc/new_26-1-hill1/monsters.txt
+npc: npc/new_26-1-hill1/passages.txt
+npc: npc/new_26-1-hill1/shops.txt
+
+// new_27-1 Forest Hill 2 (Cave)
+npc: npc/new_27-1-hill2/monsters.txt
+npc: npc/new_27-1-hill2/passages.txt
+
+// new_28-1 Forest east of map 26
+npc: npc/new_28-1-hillwest/passages.txt
+npc: npc/new_28-1-hillwest/monsters.txt
+
+// new_29-1 Forest west of map 9
+npc: npc/new_29-1-west-woodland/passages.txt
+npc: npc/new_29-1-west-woodland/monsters.txt
+npc: npc/new_29-1-west-woodland/taro.txt
+npc: npc/new_29-1-west-woodland/wedding-officiator.txt
+
+// new_30-1 Caves for map 29
+npc: npc/new_30-1-west-woodland-cave/passages.txt
+npc: npc/new_30-1-west-woodland-cave/monsters.txt
+
+// new_31-1 Forest west of map 14
+npc: npc/new_31-1-southwest-woodland/passages.txt
+npc: npc/new_31-1-southwest-woodland/monsters.txt
+npc: npc/new_31-1-southwest-woodland/alice.txt
+
+// new_32-1 Forest south of map 14
+npc: npc/new_32-1-south-woodland-2/passages.txt
+npc: npc/new_32-1-south-woodland-2/monsters.txt
+
+// new_33-1 Forest north of map 28
+npc: npc/new_33-1-hill-northwest/passages.txt
+npc: npc/new_33-1-hill-northwest/monsters.txt
+
+// new_34-1 Beach west of Tulimshar
+npc: npc/new_34-1-north-beach/passages.txt
+npc: npc/new_34-1-north-beach/monsters.txt
+
+// new_35-1 Cave beneath Hurnscald
+npc: npc/new_35-1-woodland-village/passages.txt
+npc: npc/new_35-1-woodland-village/monsters.txt
+
+// new_36-1 Magic house in forest 28
+npc: npc/new_36-1-magic-house/passages.txt
+npc: npc/new_36-1-magic-house/wizard.txt
+npc: npc/new_36-1-magic-house/apprentice.txt
+npc: npc/new_36-1-magic-house/notes.txt
+
+// new_37-1 Mine north of Hurnscald
+npc: npc/new_37-1-woodland-mine/miners.txt
+npc: npc/new_37-1-woodland-mine/monsters.txt
+npc: npc/new_37-1-woodland-mine/passages.txt
+
+// new_38-1 Mines north of Hurnscald (indoor)
+npc: npc/new_38-1-woodland-mine/angus.txt
+npc: npc/new_38-1-woodland-mine/books.txt
+npc: npc/new_38-1-woodland-mine/caul.txt
+npc: npc/new_38-1-woodland-mine/miners.txt
+npc: npc/new_38-1-woodland-mine/monsters.txt
+npc: npc/new_38-1-woodland-mine/passages.txt
+npc: npc/new_38-1-woodland-mine/receptionist.txt
+
+// Christmas 2006
+// npc: npc/xmas/xmas1.txt
+// npc: npc/xmas/xmas2.txt
+// npc: npc/xmas/xmas3.txt
+// npc: npc/xmas/xmas4.txt
+// npc: npc/xmas/xmas5.txt
+// npc: npc/xmas/xmas6.txt
+// npc: npc/xmas/xmas7.txt
+// npc: npc/xmas/xmas8.txt
+// npc: npc/xmas/xmas9.txt
+// npc: npc/xmas/xmas10.txt
+// npc: npc/xmas/xmas11.txt
+// npc: npc/xmas/xmas12.txt
+// npc: npc/xmas/xmas13.txt
+// npc: npc/xmas/xmas14.txt
+// npc: npc/xmas/xmas15.txt
+// npc: npc/xmas/xmas16.txt
+// npc: npc/xmas/xmas17.txt
+// npc: npc/xmas/xmas18.txt
+// npc: npc/xmas/xmas19.txt
+// npc: npc/xmas/xmas20.txt
+
+// Halloween 2007
+// npc: npc/halloween/2007/monsters.txt
+// npc: npc/halloween/2007/summon.txt
+
+// Christmas 2007
+// npc: npc/xmas2007/pre-xmas.txt
+// npc: npc/xmas2007/after-xmas.txt
+
+// Easter 2008
+// npc: npc/easter2008/monsters.txt
+// npc: npc/easter2008/npc.txt
+
+// Halloween 2008
+npc: npc/halloween/2008/monsters.txt
+npc: npc/halloween/2008/prize_master.txt
diff --git a/conf/motd.txt b/conf/motd.txt.example
index f570494c..f570494c 100644
--- a/conf/motd.txt
+++ b/conf/motd.txt.example
diff --git a/conf/msg_athena.conf b/conf/msg_athena.conf.example
index 1aacf66b..1aacf66b 100644
--- a/conf/msg_athena.conf
+++ b/conf/msg_athena.conf.example
diff --git a/conf/script_athena.conf b/conf/script_athena.conf.example
index 21d4a6f4..21d4a6f4 100644
--- a/conf/script_athena.conf
+++ b/conf/script_athena.conf.example
diff --git a/data/new_1-1.wlk b/data/new_1-1.wlk
index ceb1209e..871a2267 100644
--- a/data/new_1-1.wlk
+++ b/data/new_1-1.wlk
Binary files differ
diff --git a/data/new_13-1.wlk b/data/new_13-1.wlk
index 909ff11f..b51db172 100644
--- a/data/new_13-1.wlk
+++ b/data/new_13-1.wlk
Binary files differ
diff --git a/data/new_14-1.wlk b/data/new_14-1.wlk
index ec5c842b..6311da10 100644
--- a/data/new_14-1.wlk
+++ b/data/new_14-1.wlk
Binary files differ
diff --git a/data/new_15-1.wlk b/data/new_15-1.wlk
index 8bc013bc..4b3fe454 100644
--- a/data/new_15-1.wlk
+++ b/data/new_15-1.wlk
Binary files differ
diff --git a/data/new_18-1.wlk b/data/new_18-1.wlk
index 97c8cb05..b011a566 100644
--- a/data/new_18-1.wlk
+++ b/data/new_18-1.wlk
Binary files differ
diff --git a/data/new_20-1.wlk b/data/new_20-1.wlk
index 4e31e360..cf5b5a09 100644
--- a/data/new_20-1.wlk
+++ b/data/new_20-1.wlk
Binary files differ
diff --git a/data/new_23-1.wlk b/data/new_23-1.wlk
index a1df1bfc..06fad213 100644
--- a/data/new_23-1.wlk
+++ b/data/new_23-1.wlk
Binary files differ
diff --git a/data/new_25-1.wlk b/data/new_25-1.wlk
index 75a52421..d635df84 100644
--- a/data/new_25-1.wlk
+++ b/data/new_25-1.wlk
Binary files differ
diff --git a/data/new_26-1.wlk b/data/new_26-1.wlk
new file mode 100644
index 00000000..79ad3078
--- /dev/null
+++ b/data/new_26-1.wlk
Binary files differ
diff --git a/data/new_27-1.wlk b/data/new_27-1.wlk
new file mode 100644
index 00000000..d485cd87
--- /dev/null
+++ b/data/new_27-1.wlk
Binary files differ
diff --git a/data/new_28-1.wlk b/data/new_28-1.wlk
new file mode 100644
index 00000000..550eea8d
--- /dev/null
+++ b/data/new_28-1.wlk
Binary files differ
diff --git a/data/new_29-1.wlk b/data/new_29-1.wlk
new file mode 100644
index 00000000..34a98185
--- /dev/null
+++ b/data/new_29-1.wlk
Binary files differ
diff --git a/data/new_3-1.wlk b/data/new_3-1.wlk
index 24c3d72b..05b6c7aa 100644
--- a/data/new_3-1.wlk
+++ b/data/new_3-1.wlk
Binary files differ
diff --git a/data/new_30-1.wlk b/data/new_30-1.wlk
new file mode 100644
index 00000000..bcdaa8c5
--- /dev/null
+++ b/data/new_30-1.wlk
Binary files differ
diff --git a/data/new_31-1.wlk b/data/new_31-1.wlk
new file mode 100644
index 00000000..bfcef533
--- /dev/null
+++ b/data/new_31-1.wlk
Binary files differ
diff --git a/data/new_32-1.wlk b/data/new_32-1.wlk
new file mode 100644
index 00000000..2d4f1bbf
--- /dev/null
+++ b/data/new_32-1.wlk
Binary files differ
diff --git a/data/new_33-1.wlk b/data/new_33-1.wlk
new file mode 100644
index 00000000..77be5d0c
--- /dev/null
+++ b/data/new_33-1.wlk
Binary files differ
diff --git a/data/new_34-1.wlk b/data/new_34-1.wlk
new file mode 100644
index 00000000..a8f80ac4
--- /dev/null
+++ b/data/new_34-1.wlk
Binary files differ
diff --git a/data/new_35-1.wlk b/data/new_35-1.wlk
new file mode 100644
index 00000000..f1644b2e
--- /dev/null
+++ b/data/new_35-1.wlk
Binary files differ
diff --git a/data/new_36-1.wlk b/data/new_36-1.wlk
new file mode 100644
index 00000000..c6c06b31
--- /dev/null
+++ b/data/new_36-1.wlk
Binary files differ
diff --git a/data/new_37-1.wlk b/data/new_37-1.wlk
new file mode 100644
index 00000000..cb278246
--- /dev/null
+++ b/data/new_37-1.wlk
Binary files differ
diff --git a/data/new_38-1.wlk b/data/new_38-1.wlk
new file mode 100644
index 00000000..b80a18a8
--- /dev/null
+++ b/data/new_38-1.wlk
Binary files differ
diff --git a/data/new_7-1.wlk b/data/new_7-1.wlk
index c1433d31..fe816a52 100644
--- a/data/new_7-1.wlk
+++ b/data/new_7-1.wlk
Binary files differ
diff --git a/data/new_8-1.wlk b/data/new_8-1.wlk
index 27562678..0a762e12 100644
--- a/data/new_8-1.wlk
+++ b/data/new_8-1.wlk
Binary files differ
diff --git a/data/new_9-1.wlk b/data/new_9-1.wlk
index c66936d9..80e49773 100644
--- a/data/new_9-1.wlk
+++ b/data/new_9-1.wlk
Binary files differ
diff --git a/data/resnametable.txt b/data/resnametable.txt
index 4aa24b2e..7b4ae334 100644
--- a/data/resnametable.txt
+++ b/data/resnametable.txt
@@ -1,59 +1,3 @@
-new_1-1.gnd#new_zone01.gnd#
-new_2-1.gnd#new_zone01.gnd#
-new_3-1.gnd#new_zone01.gnd#
-new_4-1.gnd#new_zone01.gnd#
-new_5-1.gnd#new_zone01.gnd#
-new_1-2.gnd#new_zone02.gnd#
-new_2-2.gnd#new_zone02.gnd#
-new_3-2.gnd#new_zone02.gnd#
-new_4-2.gnd#new_zone02.gnd#
-new_5-2.gnd#new_zone02.gnd#
-new_1-3.gnd#new_zone03.gnd#
-new_2-3.gnd#new_zone03.gnd#
-new_3-3.gnd#new_zone03.gnd#
-new_4-3.gnd#new_zone03.gnd#
-new_5-3.gnd#new_zone03.gnd#
-new_1-4.gnd#new_zone04.gnd#
-new_2-4.gnd#new_zone04.gnd#
-new_3-4.gnd#new_zone04.gnd#
-new_4-4.gnd#new_zone04.gnd#
-new_5-4.gnd#new_zone04.gnd#
-force_1-1.gnd#force_map1.gnd#
-force_2-1.gnd#force_map1.gnd#
-force_3-1.gnd#force_map1.gnd#
-force_1-2.gnd#force_map2.gnd#
-force_2-2.gnd#force_map2.gnd#
-force_3-2.gnd#force_map2.gnd#
-force_1-3.gnd#force_map3.gnd#
-force_2-3.gnd#force_map3.gnd#
-force_3-3.gnd#force_map3.gnd#
-hunter_1-1.gnd#job_hunter.gnd#
-hunter_2-1.gnd#job_hunter.gnd#
-hunter_3-1.gnd#job_hunter.gnd#
-knight_1-1.gnd#job_knight.gnd#
-knight_2-1.gnd#job_knight.gnd#
-knight_3-1.gnd#job_knight.gnd#
-priest_1-1.gnd#job_priest.gnd#
-priest_2-1.gnd#job_priest.gnd#
-priest_3-1.gnd#job_priest.gnd#
-sword_1-1.gnd#job_sword1.gnd#
-sword_2-1.gnd#job_sword1.gnd#
-sword_3-1.gnd#job_sword1.gnd#
-wizard_1-1.gnd#job_wizard.gnd#
-wizard_2-1.gnd#job_wizard.gnd#
-wizard_3-1.gnd#job_wizard.gnd#
-ordeal_1-1.gnd#ordeal_a00.gnd#
-ordeal_2-1.gnd#ordeal_a00.gnd#
-ordeal_3-1.gnd#ordeal_a00.gnd#
-ordeal_1-2.gnd#ordeal_a02.gnd#
-ordeal_2-2.gnd#ordeal_a02.gnd#
-ordeal_3-2.gnd#ordeal_a02.gnd#
-ordeal_1-3.gnd#ordeal_a00.gnd#
-ordeal_2-3.gnd#ordeal_a00.gnd#
-ordeal_3-3.gnd#ordeal_a00.gnd#
-ordeal_1-4.gnd#ordeal_a02.gnd#
-ordeal_2-4.gnd#ordeal_a02.gnd#
-ordeal_3-4.gnd#ordeal_a02.gnd#
new_1-1.gat#new_1-1.wlk#
new_2-1.gat#new_2-1.wlk#
new_3-1.gat#new_3-1.wlk#
@@ -75,547 +19,21 @@ new_18-1.gat#new_18-1.wlk#
new_19-1.gat#new_19-1.wlk#
new_20-1.gat#new_20-1.wlk#
new_21-1.gat#new_21-1.wlk#
-new_22-1.gat#new_22-1.wlk#2
+new_22-1.gat#new_22-1.wlk#
new_23-1.gat#new_23-1.wlk#
new_24-1.gat#new_24-1.wlk#
new_25-1.gat#new_25-1.wlk#
-new_1-2.gat#new_zone02.gat#
-new_2-2.gat#new_zone02.gat#
-new_3-2.gat#new_zone02.gat#
-new_4-2.gat#new_zone02.gat#
-new_5-2.gat#new_zone02.gat#
-new_1-3.gat#new_zone03.gat#
-new_2-3.gat#new_zone03.gat#
-new_3-3.gat#new_zone03.gat#
-new_4-3.gat#new_zone03.gat#
-new_5-3.gat#new_zone03.gat#
-new_1-4.gat#new_zone04.gat#
-new_2-4.gat#new_zone04.gat#
-new_3-4.gat#new_zone04.gat#
-new_4-4.gat#new_zone04.gat#
-new_5-4.gat#new_zone04.gat#
-force_1-1.gat#force_map1.gat#
-force_2-1.gat#force_map1.gat#
-force_3-1.gat#force_map1.gat#
-force_1-2.gat#force_map2.gat#
-force_2-2.gat#force_map2.gat#
-force_3-2.gat#force_map2.gat#
-force_1-3.gat#force_map3.gat#
-force_2-3.gat#force_map3.gat#
-force_3-3.gat#force_map3.gat#
-hunter_1-1.gat#job_hunter.gat#
-hunter_2-1.gat#job_hunter.gat#
-hunter_3-1.gat#job_hunter.gat#
-knight_1-1.gat#job_knight.gat#
-knight_2-1.gat#job_knight.gat#
-knight_3-1.gat#job_knight.gat#
-priest_1-1.gat#job_priest.gat#
-priest_2-1.gat#job_priest.gat#
-priest_3-1.gat#job_priest.gat#
-sword_1-1.gat#job_sword1.gat#
-sword_2-1.gat#job_sword1.gat#
-sword_3-1.gat#job_sword1.gat#
-wizard_1-1.gat#job_wizard.gat#
-wizard_2-1.gat#job_wizard.gat#
-wizard_3-1.gat#job_wizard.gat#
-ordeal_1-1.gat#ordeal_a00.gat#
-ordeal_2-1.gat#ordeal_a00.gat#
-ordeal_3-1.gat#ordeal_a00.gat#
-ordeal_1-2.gat#ordeal_a02.gat#
-ordeal_2-2.gat#ordeal_a02.gat#
-ordeal_3-2.gat#ordeal_a02.gat#
-ordeal_1-3.gat#ordeal_a03.gat#
-ordeal_2-3.gat#ordeal_a03.gat#
-ordeal_3-3.gat#ordeal_a03.gat#
-ordeal_1-4.gat#ordeal_a04.gat#
-ordeal_2-4.gat#ordeal_a04.gat#
-ordeal_3-4.gat#ordeal_a04.gat#
-new_1-1.rsw#new_zone01.rsw#
-new_2-1.rsw#new_zone01.rsw#
-new_3-1.rsw#new_zone01.rsw#
-new_4-1.rsw#new_zone01.rsw#
-new_5-1.rsw#new_zone01.rsw#
-new_1-2.rsw#new_zone02.rsw#
-new_2-2.rsw#new_zone02.rsw#
-new_3-2.rsw#new_zone02.rsw#
-new_4-2.rsw#new_zone02.rsw#
-new_5-2.rsw#new_zone02.rsw#
-new_1-3.rsw#new_zone03.rsw#
-new_2-3.rsw#new_zone03.rsw#
-new_3-3.rsw#new_zone03.rsw#
-new_4-3.rsw#new_zone03.rsw#
-new_5-3.rsw#new_zone03.rsw#
-new_1-4.rsw#new_zone04.rsw#
-new_2-4.rsw#new_zone04.rsw#
-new_3-4.rsw#new_zone04.rsw#
-new_4-4.rsw#new_zone04.rsw#
-new_5-4.rsw#new_zone04.rsw#
-force_1-1.rsw#force_map1.rsw#
-force_2-1.rsw#force_map1.rsw#
-force_3-1.rsw#force_map1.rsw#
-force_1-2.rsw#force_map2.rsw#
-force_2-2.rsw#force_map2.rsw#
-force_3-2.rsw#force_map2.rsw#
-force_1-3.rsw#force_map3.rsw#
-force_2-3.rsw#force_map3.rsw#
-force_3-3.rsw#force_map3.rsw#
-hunter_1-1.rsw#job_hunter.rsw#
-hunter_2-1.rsw#job_hunter.rsw#
-hunter_3-1.rsw#job_hunter.rsw#
-knight_1-1.rsw#job_knight.rsw#
-knight_2-1.rsw#job_knight.rsw#
-knight_3-1.rsw#job_knight.rsw#
-priest_1-1.rsw#job_priest.rsw#
-priest_2-1.rsw#job_priest.rsw#
-priest_3-1.rsw#job_priest.rsw#
-sword_1-1.rsw#job_sword1.rsw#
-sword_2-1.rsw#job_sword1.rsw#
-sword_3-1.rsw#job_sword1.rsw#
-thief_1-1.rsw#job_thief1.rsw#
-thief_2-1.rsw#job_thief1.rsw#
-thief_3-1.rsw#job_thief1.rsw#
-wizard_1-1.rsw#job_wizard.rsw#
-wizard_2-1.rsw#job_wizard.rsw#
-wizard_3-1.rsw#job_wizard.rsw#
-ordeal_1-1.rsw#ordeal_a00.rsw#
-ordeal_2-1.rsw#ordeal_a00.rsw#
-ordeal_3-1.rsw#ordeal_a00.rsw#
-ordeal_1-2.rsw#ordeal_a02.rsw#
-ordeal_2-2.rsw#ordeal_a02.rsw#
-ordeal_3-2.rsw#ordeal_a02.rsw#
-ordeal_1-3.rsw#ordeal_a03.rsw#
-ordeal_2-3.rsw#ordeal_a03.rsw#
-ordeal_3-3.rsw#ordeal_a03.rsw#
-ordeal_1-4.rsw#ordeal_a04.rsw#
-ordeal_2-4.rsw#ordeal_a04.rsw#
-ordeal_3-4.rsw#ordeal_a04.rsw#
-pvp_y_1-1.gat#prontera.gat#
-pvp_y_2-1.gat#prontera.gat#
-pvp_y_3-1.gat#prontera.gat#
-pvp_y_4-1.gat#prontera.gat#
-pvp_y_5-1.gat#prontera.gat#
-pvp_y_6-1.gat#prontera.gat#
-pvp_y_7-1.gat#prontera.gat#
-pvp_y_8-1.gat#prontera.gat#
-pvp_y_1-2.gat#izlude.gat#
-pvp_y_2-2.gat#izlude.gat#
-pvp_y_3-2.gat#izlude.gat#
-pvp_y_4-2.gat#izlude.gat#
-pvp_y_5-2.gat#izlude.gat#
-pvp_y_6-2.gat#izlude.gat#
-pvp_y_7-2.gat#izlude.gat#
-pvp_y_8-2.gat#izlude.gat#
-pvp_y_1-3.gat#payon.gat#
-pvp_y_2-3.gat#payon.gat#
-pvp_y_3-3.gat#payon.gat#
-pvp_y_4-3.gat#payon.gat#
-pvp_y_5-3.gat#payon.gat#
-pvp_y_6-3.gat#payon.gat#
-pvp_y_7-3.gat#payon.gat#
-pvp_y_8-3.gat#payon.gat#
-pvp_y_1-4.gat#alberta.gat#
-pvp_y_2-4.gat#alberta.gat#
-pvp_y_3-4.gat#alberta.gat#
-pvp_y_4-4.gat#alberta.gat#
-pvp_y_5-4.gat#alberta.gat#
-pvp_y_6-4.gat#alberta.gat#
-pvp_y_7-4.gat#alberta.gat#
-pvp_y_8-4.gat#alberta.gat#
-pvp_y_1-5.gat#morocc.gat#
-pvp_y_2-5.gat#morocc.gat#
-pvp_y_3-5.gat#morocc.gat#
-pvp_y_4-5.gat#morocc.gat#
-pvp_y_5-5.gat#morocc.gat#
-pvp_y_6-5.gat#morocc.gat#
-pvp_y_7-5.gat#morocc.gat#
-pvp_y_8-5.gat#morocc.gat#
-pvp_y_1-1.gnd#prontera.gnd#
-pvp_y_2-1.gnd#prontera.gnd#
-pvp_y_3-1.gnd#prontera.gnd#
-pvp_y_4-1.gnd#prontera.gnd#
-pvp_y_5-1.gnd#prontera.gnd#
-pvp_y_6-1.gnd#prontera.gnd#
-pvp_y_7-1.gnd#prontera.gnd#
-pvp_y_8-1.gnd#prontera.gnd#
-pvp_y_1-2.gnd#izlude.gnd#
-pvp_y_2-2.gnd#izlude.gnd#
-pvp_y_3-2.gnd#izlude.gnd#
-pvp_y_4-2.gnd#izlude.gnd#
-pvp_y_5-2.gnd#izlude.gnd#
-pvp_y_6-2.gnd#izlude.gnd#
-pvp_y_7-2.gnd#izlude.gnd#
-pvp_y_8-2.gnd#izlude.gnd#
-pvp_y_1-3.gnd#payon.gnd#
-pvp_y_2-3.gnd#payon.gnd#
-pvp_y_3-3.gnd#payon.gnd#
-pvp_y_4-3.gnd#payon.gnd#
-pvp_y_5-3.gnd#payon.gnd#
-pvp_y_6-3.gnd#payon.gnd#
-pvp_y_7-3.gnd#payon.gnd#
-pvp_y_8-3.gnd#payon.gnd#
-pvp_y_1-4.gnd#alberta.gnd#
-pvp_y_2-4.gnd#alberta.gnd#
-pvp_y_3-4.gnd#alberta.gnd#
-pvp_y_4-4.gnd#alberta.gnd#
-pvp_y_5-4.gnd#alberta.gnd#
-pvp_y_6-4.gnd#alberta.gnd#
-pvp_y_7-4.gnd#alberta.gnd#
-pvp_y_8-4.gnd#alberta.gnd#
-pvp_y_1-5.gnd#morocc.gnd#
-pvp_y_2-5.gnd#morocc.gnd#
-pvp_y_3-5.gnd#morocc.gnd#
-pvp_y_4-5.gnd#morocc.gnd#
-pvp_y_5-5.gnd#morocc.gnd#
-pvp_y_6-5.gnd#morocc.gnd#
-pvp_y_7-5.gnd#morocc.gnd#
-pvp_y_8-5.gnd#morocc.gnd#
-pvp_y_1-1.rsw#prontera.rsw#
-pvp_y_2-1.rsw#prontera.rsw#
-pvp_y_3-1.rsw#prontera.rsw#
-pvp_y_4-1.rsw#prontera.rsw#
-pvp_y_5-1.rsw#prontera.rsw#
-pvp_y_6-1.rsw#prontera.rsw#
-pvp_y_7-1.rsw#prontera.rsw#
-pvp_y_8-1.rsw#prontera.rsw#
-pvp_y_1-2.rsw#izlude.rsw#
-pvp_y_2-2.rsw#izlude.rsw#
-pvp_y_3-2.rsw#izlude.rsw#
-pvp_y_4-2.rsw#izlude.rsw#
-pvp_y_5-2.rsw#izlude.rsw#
-pvp_y_6-2.rsw#izlude.rsw#
-pvp_y_7-2.rsw#izlude.rsw#
-pvp_y_8-2.rsw#izlude.rsw#
-pvp_y_1-3.rsw#payon.rsw#
-pvp_y_2-3.rsw#payon.rsw#
-pvp_y_3-3.rsw#payon.rsw#
-pvp_y_4-3.rsw#payon.rsw#
-pvp_y_5-3.rsw#payon.rsw#
-pvp_y_6-3.rsw#payon.rsw#
-pvp_y_7-3.rsw#payon.rsw#
-pvp_y_8-3.rsw#payon.rsw#
-pvp_y_1-4.rsw#alberta.rsw#
-pvp_y_2-4.rsw#alberta.rsw#
-pvp_y_3-4.rsw#alberta.rsw#
-pvp_y_4-4.rsw#alberta.rsw#
-pvp_y_5-4.rsw#alberta.rsw#
-pvp_y_6-4.rsw#alberta.rsw#
-pvp_y_7-4.rsw#alberta.rsw#
-pvp_y_8-4.rsw#alberta.rsw#
-pvp_y_1-5.rsw#morocc.rsw#
-pvp_y_2-5.rsw#morocc.rsw#
-pvp_y_3-5.rsw#morocc.rsw#
-pvp_y_4-5.rsw#morocc.rsw#
-pvp_y_5-5.rsw#morocc.rsw#
-pvp_y_6-5.rsw#morocc.rsw#
-pvp_y_7-5.rsw#morocc.rsw#
-pvp_y_8-5.rsw#morocc.rsw#
-pvp_n_1-1.gnd#prt_maze02.gnd#
-pvp_n_2-1.gnd#prt_maze02.gnd#
-pvp_n_3-1.gnd#prt_maze02.gnd#
-pvp_n_4-1.gnd#prt_maze02.gnd#
-pvp_n_5-1.gnd#prt_maze02.gnd#
-pvp_n_6-1.gnd#prt_maze02.gnd#
-pvp_n_7-1.gnd#prt_maze02.gnd#
-pvp_n_8-1.gnd#prt_maze02.gnd#
-pvp_n_1-2.gnd#job_hunter.gnd#
-pvp_n_2-2.gnd#job_hunter.gnd#
-pvp_n_3-2.gnd#job_hunter.gnd#
-pvp_n_4-2.gnd#job_hunter.gnd#
-pvp_n_5-2.gnd#job_hunter.gnd#
-pvp_n_6-2.gnd#job_hunter.gnd#
-pvp_n_7-2.gnd#job_hunter.gnd#
-pvp_n_8-2.gnd#job_hunter.gnd#
-pvp_n_1-3.gnd#job_wizard.gnd#
-pvp_n_2-3.gnd#job_wizard.gnd#
-pvp_n_3-3.gnd#job_wizard.gnd#
-pvp_n_4-3.gnd#job_wizard.gnd#
-pvp_n_5-3.gnd#job_wizard.gnd#
-pvp_n_6-3.gnd#job_wizard.gnd#
-pvp_n_7-3.gnd#job_wizard.gnd#
-pvp_n_8-3.gnd#job_wizard.gnd#
-pvp_n_1-4.gnd#job_priest.gnd#
-pvp_n_2-4.gnd#job_priest.gnd#
-pvp_n_3-4.gnd#job_priest.gnd#
-pvp_n_4-4.gnd#job_priest.gnd#
-pvp_n_5-4.gnd#job_priest.gnd#
-pvp_n_6-4.gnd#job_priest.gnd#
-pvp_n_7-4.gnd#job_priest.gnd#
-pvp_n_8-4.gnd#job_priest.gnd#
-pvp_n_1-5.gnd#job_knight.gnd#
-pvp_n_2-5.gnd#job_knight.gnd#
-pvp_n_3-5.gnd#job_knight.gnd#
-pvp_n_4-5.gnd#job_knight.gnd#
-pvp_n_5-5.gnd#job_knight.gnd#
-pvp_n_6-5.gnd#job_knight.gnd#
-pvp_n_7-5.gnd#job_knight.gnd#
-pvp_n_8-5.gnd#job_knight.gnd#
-pvp_n_1-1.gat#prt_maze02.gat#
-pvp_n_2-1.gat#prt_maze02.gat#
-pvp_n_3-1.gat#prt_maze02.gat#
-pvp_n_4-1.gat#prt_maze02.gat#
-pvp_n_5-1.gat#prt_maze02.gat#
-pvp_n_6-1.gat#prt_maze02.gat#
-pvp_n_7-1.gat#prt_maze02.gat#
-pvp_n_8-1.gat#prt_maze02.gat#
-pvp_n_1-2.gat#job_hunter.gat#
-pvp_n_2-2.gat#job_hunter.gat#
-pvp_n_3-2.gat#job_hunter.gat#
-pvp_n_4-2.gat#job_hunter.gat#
-pvp_n_5-2.gat#job_hunter.gat#
-pvp_n_6-2.gat#job_hunter.gat#
-pvp_n_7-2.gat#job_hunter.gat#
-pvp_n_8-2.gat#job_hunter.gat#
-pvp_n_1-3.gat#job_wizard.gat#
-pvp_n_2-3.gat#job_wizard.gat#
-pvp_n_3-3.gat#job_wizard.gat#
-pvp_n_4-3.gat#job_wizard.gat#
-pvp_n_5-3.gat#job_wizard.gat#
-pvp_n_6-3.gat#job_wizard.gat#
-pvp_n_7-3.gat#job_wizard.gat#
-pvp_n_8-3.gat#job_wizard.gat#
-pvp_n_1-4.gat#job_priest.gat#
-pvp_n_2-4.gat#job_priest.gat#
-pvp_n_3-4.gat#job_priest.gat#
-pvp_n_4-4.gat#job_priest.gat#
-pvp_n_5-4.gat#job_priest.gat#
-pvp_n_6-4.gat#job_priest.gat#
-pvp_n_7-4.gat#job_priest.gat#
-pvp_n_8-4.gat#job_priest.gat#
-pvp_n_1-5.gat#job_knight.gat#
-pvp_n_2-5.gat#job_knight.gat#
-pvp_n_3-5.gat#job_knight.gat#
-pvp_n_4-5.gat#job_knight.gat#
-pvp_n_5-5.gat#job_knight.gat#
-pvp_n_6-5.gat#job_knight.gat#
-pvp_n_7-5.gat#job_knight.gat#
-pvp_n_8-5.gat#job_knight.gat#
-pvp_n_1-1.rsw#prt_maze02.rsw#
-pvp_n_2-1.rsw#prt_maze02.rsw#
-pvp_n_3-1.rsw#prt_maze02.rsw#
-pvp_n_4-1.rsw#prt_maze02.rsw#
-pvp_n_5-1.rsw#prt_maze02.rsw#
-pvp_n_6-1.rsw#prt_maze02.rsw#
-pvp_n_7-1.rsw#prt_maze02.rsw#
-pvp_n_8-1.rsw#prt_maze02.rsw#
-pvp_n_1-2.rsw#job_hunter.rsw#
-pvp_n_2-2.rsw#job_hunter.rsw#
-pvp_n_3-2.rsw#job_hunter.rsw#
-pvp_n_4-2.rsw#job_hunter.rsw#
-pvp_n_5-2.rsw#job_hunter.rsw#
-pvp_n_6-2.rsw#job_hunter.rsw#
-pvp_n_7-2.rsw#job_hunter.rsw#
-pvp_n_8-2.rsw#job_hunter.rsw#
-pvp_n_1-3.rsw#job_wizard.rsw#
-pvp_n_2-3.rsw#job_wizard.rsw#
-pvp_n_3-3.rsw#job_wizard.rsw#
-pvp_n_4-3.rsw#job_wizard.rsw#
-pvp_n_5-3.rsw#job_wizard.rsw#
-pvp_n_6-3.rsw#job_wizard.rsw#
-pvp_n_7-3.rsw#job_wizard.rsw#
-pvp_n_8-3.rsw#job_wizard.rsw#
-pvp_n_1-4.rsw#job_priest.rsw#
-pvp_n_2-4.rsw#job_priest.rsw#
-pvp_n_3-4.rsw#job_priest.rsw#
-pvp_n_4-4.rsw#job_priest.rsw#
-pvp_n_5-4.rsw#job_priest.rsw#
-pvp_n_6-4.rsw#job_priest.rsw#
-pvp_n_7-4.rsw#job_priest.rsw#
-pvp_n_8-4.rsw#job_priest.rsw#
-pvp_n_1-5.rsw#job_knight.rsw#
-pvp_n_2-5.rsw#job_knight.rsw#
-pvp_n_3-5.rsw#job_knight.rsw#
-pvp_n_4-5.rsw#job_knight.rsw#
-pvp_n_5-5.rsw#job_knight.rsw#
-pvp_n_6-5.rsw#job_knight.rsw#
-pvp_n_7-5.rsw#job_knight.rsw#
-pvp_n_8-5.rsw#job_knight.rsw#
-pvp_n_room.gnd#pvp_room.gnd#
-pvp_n_room.gat#pvp_room.gat#
-pvp_n_room.rsw#pvp_room.rsw#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\pvp_n_room.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\pvp_room.bmp#
-pvp_y_room.gnd#pvp_room.gnd#
-pvp_y_room.gat#pvp_room.gat#
-pvp_y_room.rsw#pvp_room.rsw#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\pvp_y_room.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\pvp_room.bmp#
-pvp_c_room.gnd#pvp_room.gnd#
-pvp_c_room.gat#pvp_room.gat#
-pvp_c_room.rsw#pvp_room.rsw#
-
-
-guild_room.gnd#quiz_01.gnd#
-guild_room.gat#quiz_01.gat#
-guild_room.rsw#quiz_01.rsw#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\guild_room.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\quiz_01.bmp#
-
-nguild_prt.rsw#prtg_cas01.rsw#
-nguild_prt.gat#prtg_cas01.gat#
-nguild_prt.gnd#prtg_cas01.gnd#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\nguild_prt.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\prtg_cas01.bmp#
-
-nguild_pay.rsw#payg_cas01.rsw#
-nguild_pay.gat#payg_cas01.gat#
-nguild_pay.gnd#payg_cas01.gnd#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\nguild_pay.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\payg_cas01.bmp#
-
-nguild_alde.rsw#aldeg_cas01.rsw#
-nguild_alde.gat#aldeg_cas01.gat#
-nguild_alde.gnd#aldeg_cas01.gnd#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\nguild_alde.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\aldeg_cas01.bmp#
-
-nguild_gef.rsw#gefg_cas01.rsw#
-nguild_gef.gat#gefg_cas01.gat#
-nguild_gef.gnd#gefg_cas01.gnd#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\nguild_gef.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\gefg_cas01.bmp#
-
-À¯ÀúÀÎÅÍÆäÀ̽º\map\n_castle.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\gefg_cas01.bmp#
-
-
-À¯ÀúÀÎÅÍÆäÀ̽º\map\pvp_c_room.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\pvp_room.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\pvp_n_1-1.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\prt_maze02.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\pvp_n_2-1.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\prt_maze02.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\pvp_n_3-1.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\prt_maze02.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\pvp_n_4-1.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\prt_maze02.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\pvp_n_5-1.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\prt_maze02.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\pvp_n_6-1.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\prt_maze02.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\pvp_n_7-1.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\prt_maze02.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\pvp_n_8-1.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\prt_maze02.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\pvp_n_1-2.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\job_hunter.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\pvp_n_2-2.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\job_hunter.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\pvp_n_3-2.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\job_hunter.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\pvp_n_4-2.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\job_hunter.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\pvp_n_5-2.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\job_hunter.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\pvp_n_6-2.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\job_hunter.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\pvp_n_7-2.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\job_hunter.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\pvp_n_8-2.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\job_hunter.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\pvp_n_1-3.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\job_wizard.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\pvp_n_2-3.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\job_wizard.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\pvp_n_3-3.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\job_wizard.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\pvp_n_4-3.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\job_wizard.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\pvp_n_5-3.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\job_wizard.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\pvp_n_6-3.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\job_wizard.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\pvp_n_7-3.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\job_wizard.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\pvp_n_8-3.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\job_wizard.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\pvp_n_1-4.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\job_priest.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\pvp_n_2-4.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\job_priest.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\pvp_n_3-4.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\job_priest.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\pvp_n_4-4.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\job_priest.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\pvp_n_5-4.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\job_priest.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\pvp_n_6-4.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\job_priest.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\pvp_n_7-4.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\job_priest.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\pvp_n_8-4.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\job_priest.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\pvp_n_1-5.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\job_knight.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\pvp_n_2-5.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\job_knight.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\pvp_n_3-5.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\job_knight.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\pvp_n_4-5.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\job_knight.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\pvp_n_5-5.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\job_knight.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\pvp_n_6-5.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\job_knight.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\pvp_n_7-5.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\job_knight.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\pvp_n_8-5.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\job_knight.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\pvp_y_1-1.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\prontera.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\pvp_y_2-1.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\prontera.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\pvp_y_3-1.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\prontera.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\pvp_y_4-1.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\prontera.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\pvp_y_5-1.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\prontera.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\pvp_y_6-1.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\prontera.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\pvp_y_7-1.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\prontera.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\pvp_y_8-1.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\prontera.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\pvp_y_1-2.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\izlude.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\pvp_y_2-2.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\izlude.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\pvp_y_3-2.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\izlude.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\pvp_y_4-2.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\izlude.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\pvp_y_5-2.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\izlude.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\pvp_y_6-2.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\izlude.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\pvp_y_7-2.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\izlude.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\pvp_y_8-2.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\izlude.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\pvp_y_1-3.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\payon.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\pvp_y_2-3.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\payon.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\pvp_y_3-3.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\payon.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\pvp_y_4-3.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\payon.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\pvp_y_5-3.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\payon.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\pvp_y_6-3.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\payon.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\pvp_y_7-3.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\payon.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\pvp_y_8-3.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\payon.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\pvp_y_1-4.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\alberta.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\pvp_y_2-4.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\alberta.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\pvp_y_3-4.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\alberta.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\pvp_y_4-4.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\alberta.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\pvp_y_5-4.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\alberta.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\pvp_y_6-4.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\alberta.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\pvp_y_7-4.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\alberta.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\pvp_y_8-4.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\alberta.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\pvp_y_1-5.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\morocc.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\pvp_y_2-5.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\morocc.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\pvp_y_3-5.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\morocc.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\pvp_y_4-5.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\morocc.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\pvp_y_5-5.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\morocc.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\pvp_y_6-5.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\morocc.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\pvp_y_7-5.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\morocc.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\pvp_y_8-5.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\morocc.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\new_1-1.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\new_zone01.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\new_2-1.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\new_zone01.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\new_3-1.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\new_zone01.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\new_4-1.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\new_zone01.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\new_5-1.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\new_zone01.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\new_1-2.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\new_zone02.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\new_2-2.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\new_zone02.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\new_3-2.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\new_zone02.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\new_4-2.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\new_zone02.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\new_5-2.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\new_zone02.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\new_1-3.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\new_zone03.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\new_2-3.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\new_zone03.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\new_3-3.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\new_zone03.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\new_4-3.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\new_zone03.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\new_5-3.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\new_zone03.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\new_1-4.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\new_zone04.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\new_2-4.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\new_zone04.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\new_3-4.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\new_zone04.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\new_4-4.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\new_zone04.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\new_5-4.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\new_zone04.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\force_1-1.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\force_map1.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\force_2-1.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\force_map1.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\force_3-1.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\force_map1.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\force_1-2.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\force_map2.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\force_2-2.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\force_map2.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\force_3-2.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\force_map2.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\force_1-3.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\force_map3.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\force_2-3.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\force_map3.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\force_3-3.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\force_map3.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\hunter_1-1.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\in_hunter.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\hunter_2-1.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\in_hunter.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\hunter_3-1.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\in_hunter.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\knight_1-1.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\job_knight.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\knight_2-1.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\job_knight.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\knight_3-1.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\job_knight.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\priest_1-1.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\job_priest.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\priest_2-1.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\job_priest.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\priest_3-1.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\job_priest.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\sword_1-1.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\job_sword1.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\sword_2-1.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\job_sword1.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\sword_3-1.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\job_sword1.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\thief_1-1.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\job_thief1.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\thief_2-1.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\job_thief1.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\thief_3-1.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\job_thief1.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\wizard_1-1.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\job_wizard.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\wizard_2-1.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\job_wizard.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\wizard_3-1.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\job_wizard.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\ordeal_1-1.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\ordeal_a00.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\ordeal_2-1.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\ordeal_a00.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\ordeal_3-1.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\ordeal_a00.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\ordeal_1-2.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\ordeal_a02.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\ordeal_2-2.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\ordeal_a02.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\ordeal_3-2.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\ordeal_a02.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\ordeal_1-3.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\ordeal_a03.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\ordeal_2-3.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\ordeal_a03.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\ordeal_3-3.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\ordeal_a03.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\ordeal_1-4.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\ordeal_a04.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\ordeal_2-4.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\ordeal_a04.bmp#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\ordeal_3-4.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\ordeal_a04.bmp#
-
-job_sage.rsw#job_wiz.rsw#
-job_sage.gat#job_wiz.gat#
-job_sage.gnd#job_wiz.gnd#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\job_sage.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\job_wiz.bmp#
-job_cru.rsw#job_prist.rsw#
-job_cru.gat#job_prist.gat#
-job_cru.gnd#job_prist.gnd#
-À¯ÀúÀÎÅÍÆäÀ̽º\map\job_cru.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\job_prist.bmp#
+new_26-1.gat#new_26-1.wlk#
+new_27-1.gat#new_27-1.wlk#
+new_28-1.gat#new_28-1.wlk#
+new_29-1.gat#new_29-1.wlk#
+new_30-1.gat#new_30-1.wlk#
+new_31-1.gat#new_31-1.wlk#
+new_32-1.gat#new_32-1.wlk#
+new_33-1.gat#new_33-1.wlk#
+new_34-1.gat#new_34-1.wlk#
+new_35-1.gat#new_35-1.wlk#
+new_36-1.gat#new_36-1.wlk#
+new_37-1.gat#new_37-1.wlk#
+new_38-1.gat#new_38-1.wlk#
+new_39-1.gat#new_39-1.wlk#
diff --git a/db/const.txt b/db/const.txt
index 76095b9c..73e60c04 100644
--- a/db/const.txt
+++ b/db/const.txt
@@ -1,73 +1,4 @@
-Job_Novice 0
-Job_Swordman 1
-Job_Mage 2
-Job_Archer 3
-Job_Acolyte 4
-Job_Merchant 5
-Job_Thief 6
-Job_Knight 7
-Job_Priest 8
-Job_Wizard 9
-Job_Blacksmith 10
-Job_Hunter 11
-Job_Assassin 12
-Job_Knight2 13
-Job_Crusader 14
-Job_Monk 15
-Job_Sage 16
-Job_Rogue 17
-Job_Alchem 18
-Job_Bard 19
-Job_Dancer 20
-Job_Crusader2 21
-Job_SuperNovice 23
-Job_Novice_High 24
-Job_Swordman_High 25
-Job_Mage_High 26
-Job_Archer_High 27
-Job_Acolyte_High 28
-Job_Merchant_High 29
-Job_Thief_High 30
-Job_Lord_Knight 31
-Job_High_Priest 32
-Job_High_Wizard 33
-Job_Whitesmith 34
-Job_Sniper 35
-Job_Assassin_Cross 36
-Job_Lord_Knight2 37
-Job_Paladin 38
-Job_Champion 39
-Job_Professor 40
-Job_Stalker 41
-Job_Creator 42
-Job_Clown 43
-Job_Gypsy 44
-Job_Paladin2 45
-Job_Baby 46
-Job_Baby_Swordman 47
-Job_Baby_Mage 48
-Job_Baby_Archer 49
-Job_Baby_Acolyte 50
-Job_Baby_Merchant 51
-Job_Baby_Thief 52
-Job_Baby_Knight 53
-Job_Baby_Priest 54
-Job_Baby_Wizard 55
-Job_Baby_Blacksmith 56
-Job_Baby_Hunter 57
-Job_Baby_Assassin 58
-Job_Baby_Knight2 59
-Job_Baby_Crusader 60
-Job_Baby_Monk 61
-Job_Baby_Sage 62
-Job_Baby_Rogue 63
-Job_Baby_Alchem 64
-Job_Baby_Bard 65
-Job_Baby_Dancer 66
-Job_Baby_Crusader2 67
-Job_Super_Baby 68
-
-
+// Constants usable in scripts
mf_nomemo 0
mf_noteleport 1
@@ -196,36 +127,50 @@ bAgiVit 1071
bAgiDexStr 1072
bPerfectHide 1073
-bRestartFullRecover 2000
-bNoCastCancel 2001
-bNoSizeFix 2002
-bNoMagicDamage 2003
-bNoWeaponDamage 2004
-bNoGemStone 2005
-bNoCastCancel2 2006
-bInfiniteEndure 2007
+equip_head 1
+equip_shield 2
+equip_hand2 3
+equip_hand1 4
+equip_gloves 5
+equip_shoes 6
+equip_misc1 7
+equip_misc2 8
+equip_torso 9
+equip_legs 10
+
+cNone 11
+cWhite 10
+cRed 0
+cGreen 1
+cDarkBlue 2
+cYellow 3
+cLightBlue 4
+cPink 5
+cBlack 6
+cOrange 7
+cPurple 8
+cDarkGreen 9
+
+NIBBLE_0_SHIFT 0
+NIBBLE_0_MASK 15
+
+NIBBLE_1_SHIFT 4
+NIBBLE_1_MASK 240
+
+NIBBLE_2_SHIFT 8
+NIBBLE_2_MASK 3840
+
+NIBBLE_3_SHIFT 12
+NIBBLE_3_MASK 61440
+
+NIBBLE_4_SHIFT 16
+NIBBLE_4_MASK 983040
+
+NIBBLE_5_SHIFT 20
+NIBBLE_5_MASK 15728640
-Eff_Stone 0
-Eff_Freeze 1
-Eff_Stan 2
-Eff_Sleep 3
-Eff_Poison 4
-Eff_Curse 5
-Eff_Silence 6
-Eff_Confusion 7
-Eff_Blind 8
+NIBBLE_6_SHIFT 24
+NIBBLE_6_MASK 251658240
-SC_Stone 128
-SC_Freeze 129
-SC_Stan 130
-SC_Sleep 131
-SC_Poison 132
-SC_Curse 133
-SC_Silence 134
-SC_Confusion 135
-SC_Blind 136
-SC_SpeedPot0 37
-SC_SpeedPot1 38
-SC_SpeedPot2 39
-SC_ATKPot 185
-SC_MATKPot 186
+NIBBLE_7_SHIFT 28
+NIBBLE_7_MASK 4026531840
diff --git a/db/item_db.txt b/db/item_db.txt
index 2b023980..3bebd29c 100644
--- a/db/item_db.txt
+++ b/db/item_db.txt
@@ -1,142 +1,299 @@
-#ID, Name, Label, Type, Price, Sell, Weight, ATK, DEF, Range, Slot, Job, Gender, Loc, wLV, eLV, View, {UseScript}, {EquipScript}
- 0, DEFAULT, Default, 0, 20, 10, 10, , , , , 10477567, 2, , , , , {}, {}
-501, CactusDrink, Cactus Drink, 0, 50, 25, 70, , , , , 10477567, 2, , , 0, , { itemheal 15,0; }, {}
-502, CactusPotion, Cactus Potion, 0, 70, 35, 70, , , , , 10477567, 2, , , 0, , { itemheal 25,10; }, {}
-503, CasinoCoins, Casino Coins, 3, 20, 10, 1, , , , , , , , , , , {}, {}
-504, DecorCandyCane, Decor Candy Cane, 3, 25, 10, 10, , , , , , , , , , , {}, {}
-505, MaggotSlime, Maggot Slime, 3, 8, 4, 10, , , , , , , , , , , {}, {}
-506, CandyCane, Candy Cane, 0, 20, 10, 1, , , , , 10477567, 2, , , 0, , { itemheal 5,0; }, {}
-507, ScorpionStinger, ScorpionStinger, 3, 50, 25, 10, , , , , , , , , , , {}, {}
-508, XmasCake, Xmas Cake, 0, 70, 10, 1, , , , , 10477567, 2, , , 0, , { itemheal 10,0; }, {}
-509, ChocolateBar, Chocolate Bar, 0, 60, 20, 1, , , , , 10477567, 2, , , 0, , { itemheal 20,0; }, {}
-510, Candy, Candy, 0, 20, 10, 1, , , , , 10477567, 2, , , 0, , { itemheal 5,0; }, {}
-511, SantaHat, Santa Hat, 5, 400, 200, 200, , 2, , 0, 10477567, 2, 256, , 0, 10, {}, {}
-512, GingerBreadMan, Ginger Bread Man, 0, 50, 25, 1, , , , , 10477567, 2, , , 0, , { itemheal 25,0; }, {}
-513, Cake, Cake, 0, 30, 15, 1, , , , , 10477567, 2, , , 0, , { itemheal 15,0; }, {}
-514, XmasCandyCane, Xmas Candy Cane, 0, 30, 15, 1, , , , , 10477567, 2, , , 0, , { itemheal 10,0; }, {}
-515, PurplePresent, Purple Present, 3, 50, 25, 1, , , , , , , , , , , {}, {}
-516, YellowPresent, Yellow Present, 3, 60, 30, 1, , , , , , , , , , , {}, {}
-517, RedScorpionStinger, Red Scorpion Stinger, 3, 170, 85, 1, , , , , , , , , , , {}, {}
-518, BugLeg, Bug Leg, 3, 60, 20, 1, , , , , , , , , , , {}, {}
-519, CherryCake, Cherry Cake, 0, 100, 50, 1, , , , , 10477567, 2, , , 0, , { itemheal 35,0; }, {}
-520, EasterEgg, Easter Egg, 0, 200, 100, 1, , , , , 10477567, 2, , , 0, , { itemheal 100,0; }, {}
-521, Dagger, Dagger, 4, 1000, 500, 100, 15, , 1, 0, 10477567, 2, 2, 1, 1, 1, {}, {}
-522, SharpKnife, Sharp Knife, 4, 100, 50, 100, 10, , 1, 0, 10477567, 2, 2, 1, 1, 1, {}, {}
-523, LeatherShirt, Leather Shirt, 5, 2000, 1000, 100, , 4, , 0, 10477567, 2, 512, , 0, 3, {}, {}
-524, FancyHat, Fancy Hat, 5, 1600, 800, 25, , 5, , 0, 10477567, 2, 256, , 0, 8, {}, {}
-525, MinerHat, Miner Hat, 5, 800, 400, 200, , 4, , 0, 10477567, 2, 256, , 0, 9, {}, {}
-526, CoinsBag, Coins Bag, 3, 100, 50, 5, , , , , , , , , , , {}, {}
-527, Milk, Milk, 0, 300, 150, 5, , , , , 10477567, 2, , , 0, , { itemheal 150,0; }, {}
-528, Boots, Boots, 5, 8000, 500, 200, , 2, , 0, 10477567, 2, 64, , 0, 0, {}, {}
-529, IronArrow, Iron Arrow, 10, 5, 2, 1, 50, , , , 10477567, 2, 32768, , , , {}, {}
-530, ShortBow, Short Bow, 4, 3000, 500, 200, 50, , 5, 0, 10477567, 2, 34, 1, 4, 11, {}, {}
-531, MinerGloves, Miner Gloves, 5, 3000, 1000, 20, , 2, , 0, 10477567, 2, 4, , 0, 0, {}, {}
-532, LeatherGloves, Leather Gloves, 5, 6000, 2000, 30, , 3, , 0, 10477567, 2, 4, , 0, 0, {}, {}
-533, RoastedMaggot, RoastedMaggot, 0, 110, 55, 5, , , , , 10477567, 2, , , 0, , { itemheal 150,0; }, {}
-534, OrangeCupcake, OrangeCupcake, 0, 90, 45, 5, , , , , 10477567, 2, , , 0, , { itemheal 100,10; }, {}
-535, Apple, Apple, 0, 10, 5, 5, , , , , 10477567, 2, , , 0, , { itemheal 50,0; }, {}
-536, ShortSword, Short Sword, 4, 8000, 4000, 100, 100, , 1, 0, 10477567, 2, 2, 1, 1, 1, {}, {}
-537, TreasureKey, Treasure Key, 3, 100, 50, 5, , , , , , , , , , , {}, {}
-538, GreenPresent, Green Present, 0, 20, 10, 10, , , , , 10477567, 2, , , 0, , {}, {}
-539, Beer, Beer, 0, 175, 87, 10, , , , , 10477567, 2, , , 0, , { itemheal 200,5; }, {}
-540, Empty Bottle, Empty Bottle, 3, 20, 10, 10, , , , , , , , , , , {}, {}
-541, BottleWater, Bottle Water, 0, 200, 100, 10, , , , , 10477567, 2, , , 0, , { itemheal 250,0; }, {}
-542, BottledSand, Bottled Sand, 3, 70, 35, 10, , , , , , , , , , , {}, {}
-543, StandardHeadBand, Standard Head Band, 5, 800, 400, 10, , 3, , 0, 10477567, 2, 256, , 0, 7, {}, {}
-544, SilkHeadBand, Silk Head Band, 5, 5000, 2000, 10, , 10, , 0, 10477567, 2, 256, , 0, 6, {}, {}
-545, ForestBow, Forest Bow, 4, 5000, 2500, 10, 70, , 5, 0, 10477567, 2, 34, 1, 0, 11, {}, {}
-546, DesertShirt, DesertShirt, 5, 2000, 1000, 10, , 6, , 0, 10477567, 2, 512, , 0, 2, {}, {}
-547, Spear, Spear, 5, 20, 10, 10, , 100, , 0, 0, 2, 2, , 0, 0, {}, {}
-548, Pickaxe, Pickaxe, 4, 20, 10, 10, 100, , 1, 0, 0, 2, 2, 1, 0, 0, {}, {}
-549, Axe, Axe, 4, 20, 10, 10, 100, , 1, 0, 0, 2, 2, 1, 0, 0, {}, {}
-550, BlacksmithAxe, Blacksmith Axe, 4, 20, 10, 10, 100, , 1, 0, 0, 2, 2, 1, 0, 0, {}, {}
-551, Hint1, Hint, 3, 20, 0, 10, , , , , , , , , , , {}, {}
-552, Hint2, Hint, 3, 20, 0, 10, , , , , , , , , , , {}, {}
-553, Hint3, Hint, 3, 20, 0, 10, , , , , , , , , , , {}, {}
-554, Hint4, Hint, 3, 20, 0, 10, , , , , , , , , , , {}, {}
-555, Hint5, Hint, 3, 20, 0, 10, , , , , , , , , , , {}, {}
-556, Hint6, Hint, 3, 20, 0, 10, , , , , , , , , , , {}, {}
-557, Hint7, Hint, 3, 20, 0, 10, , , , , , , , , , , {}, {}
-558, Hint8, Hint, 3, 20, 0, 10, , , , , , , , , , , {}, {}
-559, Hint9, Hint, 3, 20, 0, 10, , , , , , , , , , , {}, {}
-560, Hint10, Hint, 3, 20, 0, 10, , , , , , , , , , , {}, {}
-561, SabreSword, SabreSword, 4, 10000, 5000, 100, 100, , 1, 0, 10477567, 2, 2, 1, 1, 1, {}, {}
-562, ChickenLeg, ChickenLeg, 0, 250, 125, 10, , , , , 10477567, 2, , , 0, , { itemheal 500,5; }, {}
-563, WinterGloves, WinterGloves, 5, 6000, 3000, 20, , 2, , 0, 10477567, 2, 4, , 0, 0, {}, {}
-564, WoolSweater, WoolSweater, 5, 2000, 1000, 10, , 6, , 0, 10477567, 2, 512, , 0, 20, {}, {}
-565, Petal, Petal, 0, 50, 25, 10, , , , , 10477567, 2, , , 0, , { itemheal 50,5; }, {}
-566, SmallMushroom, SmallMushroom, 0, 50, 25, 10, , , , , 10477567, 2, , , 0, , { itemheal 50,5; }, {}
-567, IronPotion, IronPotion, 0, 500, 250, 10, , , , , 10477567, 2, , , 0, , { sc_start SC_ATKPOT,30,30; }, {}
-568, ConcentrationPotion, ConcentrationPotion, 0, 500, 250, 10, , , , , 10477567, 2, , , 0, , { sc_start SC_SpeedPot0,1800,0; }, {}
-569, RawLog, Raw Log, 3, 20 , 10, 10, , , , , , , , , , {}, {}
-570, BoneKnife, Bone Knife, 4, 8000, 4000, 100, 100, , 1, 0, 10477567, 2, 2, 1, 1, 1, {}, {}
-571, Setzer, Setzer, 4, 8000, 4000, 100, 100, , 1, 0, 10477567, 2, 2, 1, 1, 1, {}, {}
-572, Scimitar, Scimitar, 4, 8000, 4000, 100, 100, , 1, 0, 10477567, 2, 2, 1, 1, 1, {}, {}
-573, Falcion, Falcion, 4, 8000, 4000, 100, 100, , 1, 0, 10477567, 2, 2, 1, 1, 1, {}, {}
-574, Scorpion, Scorpion, 4, 8000, 4000, 100, 100, , 1, 0, 10477567, 2, 2, 1, 1, 1, {}, {}
-575, ShortBow, Short Bow, 4, 8000, 4000, 100, 100, , 1, 0, 10477567, 2, 34, 1, 1, 11, {}, {}
-576, Beheader, Beheader, 4, 8000, 4000, 100, 100, , 1, 0, 10477567, 2, 2, 1, 1, 1, {}, {}
-577, Bonedarts, Bonedarts, 4, 8000, 4000, 100, 100, , 1, 0, 10477567, 2, 2, 1, 1, 1, {}, {}
-578, Sandcutter, Sandcutter, 4, 8000, 4000, 100, 100, , 1, 0, 10477567, 2, 2, 1, 1, 1, {}, {}
-579, Rocknife, Rocknife, 4, 15000, 7500, 100, 300, , 1, 0, 10477567, 2, 34, 1, 1, 1, {}, {}
-580, Staffoflive, Staffoflive, 4, 8000, 4000, 100, 100, , 1, 0, 10477567, 2, 2, 1, 1, 1, {}, {}
-581, Srescentrod, Crescentrod, 4, 8000, 4000, 100, 100, , 1, 0, 10477567, 2, 2, 1, 1, 1, {}, {}
-582, StaffOfRa, Staff Of Ra, 4, 8000, 4000, 100, 100, , 1, 0, 10477567, 2, 2, 1, 1, 1, {}, {}
-583, StaffOfAmun, Staff Of Amun, 4, 8000, 4000, 100, 100, , 1, 0, 10477567, 2, 2, 1, 1, 1, {}, {}
-584, Jackal, Jackal, 4, 8000, 4000, 100, 100, , 1, 0, 10477567, 2, 2, 1, 1, 1, {}, {}
-585, Scarabarmelt, Scarabarmlet, 5, 8000, 4000, 100, , 0, , 0, 10477567, 2, 32, , 1, 1, {}, {}
-586, CottonShorts, Cotton Shorts, 5, 1000, 500, 10, , 2, , 0, 10477567, 2, 1, , 1, 4, {}, {}
-610, JeansShorts, Jeans Shorts, 5, 2000, 1000, 10, , 4, , 0, 10477567, 2, 1, , 0, 5, {}, {}
-611, WhiteFur, White Fur, 3, 8, 4, 10, , , , , , , , , , , {}, {}
-612, SnakeLamp, Snake Lamp, 3, 80, 40, 10, , , , , , , , , , , {}, {}
-613, HardSpike, Hard Spike, 3, 8, 4, 10, , , , , , , , , , , {}, {}
-614, PinkAntenna, Pink Antenna, 3, 10, 5, 10, , , , , , , , , , , {}, {}
-615, PumpkinHelmet, Pumpkin helmet, 5, 2000, 1000, 10, , 4, , 0, 10477567, 2, 256, , 0, 11, {}, {}
-616, AxeHat, Axe Hat, 5, 2000, 1000, 10, , 4, , 0, 10477567, 2, 256, , 0, 12, {}, {}
-617, PirateHat, Pirate Hat, 5, 2000, 1000, 10, , 4, , 0, 10477567, 2, 256, , 0, 13, {}, {}
-618, Goggles, Goggles, 5, 500, 100, 10, , 2, , 0, 10477567, 2, 256, , 0, 14, {}, {}
-619, LeatherGoggles, Leather Goggles, 5, 1000, 500, 10, , 3, , 0, 10477567, 2, 256, , 0, 15, {}, {}
-620, Circlet, Circlet, 5, 2000, 1000, 10, , 4, , 0, 10477567, 2, 256, , 0, 16, {}, {}
-621, Eyepatch, Eyepatch, 5, 1000, 500, 10, , 3, , 0, 10477567, 2, 256, , 0, 17, {}, {}
-622, Bandana, Bandana, 5, 1000, 500, 10, , 3, , 0, 10477567, 2, 256, , 0, 18, {}, {}
-623, Scythe, Scythe, 4, 100, 50, 400, 75, , 1, 0, 10477567, 2, 2, 1, 1, 3, {}, {}
-624, VNeckSweater, V Neck Sweater, 5, 6000, 3000, 10, , 8, , 0, 10477567, 2, 512, , 0, 19, {}, {}
-625, ChainmailChestArmor, Chainmail Chest Armor, 5, 15000, 1500, 250, , 20, , 0, 10477567, 2, 512, , 0, 25, {}, {}
-626, PlatemailChestArmor, Platemail Chest Armor, 5, 50000, 2500, 240, , 25, , 0, 10477567, 2, 512, , 0, 26, {}, {}
-627, TopHat, Top Hat, 5, 2500, 1250, 10, , 15, , 0, 10477567, 2, 256, , 0, 33, {}, {}
-628, FunkyHat, Funky Hat, 5, 3000, 1500, 10, , 18, , 0, 10477567, 2, 256, , 0, 34, {}, {}
-629, MushroomHat, Mushroom Hat, 5, 2500, 1250, 10, , 15, , 0, 10477567, 2, 256, , 0, 37, {}, {}
-630, ShroomHat, Shroom Hat, 5, 3000, 1500, 10, , 18, , 0, 10477567, 2, 256, , 0, 38, {}, {}
-631, DarkCrystal, Dark Crystal, 3, 100, 50, 10, , , , , , , , , , , {}, {}
-632, CottonSkirt, CottonSkirt, 5, 1000, 500, 10, , 4, , 0, 10477567, 2, 1, , 1, 27, {}, {}
-633, XmaselfHat, XmaselfHat, 5, 3000, 1500, 10, , 18, , 0, 10477567, 2, 256, , 0, 36, {}, {}
-634, WoodenMask, WoodenMask, 5, 2500, 1250, 10, , 15, , 0, 10477567, 2, 256, , 0, 35, {}, {}
-635, Santacookie, Santacookie, 3, 1, 1, 1, , , , , , , , , , , {}, {}
-636, WarlordHelm, Warlord Helmet, 5, 30000, 3000, 10, , 25, , 0, 10477567, 2, 256, , 0, 39, {}, {}
-637, KnightHelm, Knight Helmet, 5, 20000, 2000, 10, , 20, , 0, 10477567, 2, 256, , 0, 40, {}, {}
-638, InfantryHelm, Infantry Helmet, 5, 15000, 1500, 10, , 20, , 0, 10477567, 2, 256, , 0, 41, {}, {}
-639, CrusadeHelm, Crusade Helmet, 5, 25000, 2500, 10, , 25, , 0, 10477567, 2, 256, , 0, 42, {}, {}
-640, IronOre, Iron Ore, 3, 250, 100, 40, , , , , , , , , , , {}, {}
-641, SnakeSkin, Snake Skin, 3, 250, 100, 20, , , , , , , , , , , {}, {}
-642, JeansChaps, Jeans Chaps, 5, 2000, 1000, 40, , 6, , 0, 10477567, 2, 1, , 0, 28, {}, {}
-643, CowboyWhite, White Cowboy Hat, 5, 1800, 900, 30, , 6, , 0, 10477567, 2, 256, , 0, 43, {}, {}
-644, CowboyBlack, Black Cowboy Hat, 5, 1800, 900, 30, , 6, , 0, 10477567, 2, 256, , 0, 44, {}, {}
-645, GoldenPlatemailArmor, Golden Platemail Armor, 5, 9999000,2500, 240, , 25, , 0, 10477567, 2, 512, , 0, 45, {}, {}
-646, Crown, Crown, 5, 5000, 1000, 50, , 4, , 0, 10477567, 2, 256, , 0, 46, {}, {}
-647, Cap, Cap, 5, 2000, 500, 20, , 5, , 0, 10477567, 2, 256, , 0, 47, {}, {}
-1199, Arrow, Arrow, 10, 3, 1, 1, 25, 0, 0, 0, 10477567, 2, 32768, , , , {}, {}
-1200, Bow, Bow, 4, 1000, 500, 200, 20, , 5, 0, 10477567, 2, 34, 1, 4, 11, {}, {}
-1201, Knife, Knife, 4, 50, 25, 100, 5, , 1, 0, 10477567, 2, 2, 1, 1, 1, {}, {}
-1202, CottonShirt, Cotton Shirt, 5, 10, 5, 100, , 2, , 0, 10477567, 2, 512, , 0, 1, {}, {}
-1203, RangerHat, Ranger Hat, 5, 1000, 500, 10, , 2, , 0, 10477567, 2, 256, , 0, 21, {}, {}
-1204, AntlerHat, Antler Hat, 5, 1000, 500, 10, , 4, , 0, 10477567, 2, 256, , 0, 22, {}, {}
-1205, ChristmasTreeHat, Christmas Tree Hat, 5, 2000, 1000, 10, , 2, , 0, 10477567, 2, 256, , 0, 23, {}, {}
-1206, SantaBeardHat, Santa Beard Hat, 5, 1000, 500, 10, , 5, , 0, 10477567, 2, 256, , 0, 24, {}, {}
-1207, RedStocking, Red Stocking, 3, 80, 40, 10, , , , , , , , , , , {}, {}
-1208, RedEgg, RedEgg, 3, 80, 40, 10, , , , , , , , , , , {}, {}
-1209, GreenEgg, GreenEgg, 3, 80, 40, 10, , , , , , , , , , , {}, {}
-1210, BlueEgg, BlueEgg, 3, 80, 40, 10, , , , , , , , , , , {}, {}
-1211, YellowEgg, YellowEgg, 3, 80, 40, 10, , , , , , , , , , , {}, {}
-1212, PinkEgg, PinkEgg, 3, 80, 40, 10, , , , , , , , , , , {}, {}
-1213, TealEgg, TealEgg, 3, 80, 40, 10, , , , , , , , , , , {}, {}
-1214, BunnyHeadBand, Bunny Head Band, 5, 5000, 2000, 10, , 10, , 0, 10477567, 2, 256, , 0, 29, {}, {}
+#ID, Name, Label, Type, Price, Sell, Weight, ATK, DEF, Range, Mbonus, Slot, Job, Gender, Loc, wLV, eLV, View, {UseScript}, {EquipScript}
+ 0, DEFAULT, Default, 0, 20, 10, 10, , , , , , 10477567, 2, , , , , {}, {}
+501, CactusDrink, Cactus Drink, 0, 50, 25, 70, , , , , , 10477567, 2, , , 0, , { itemheal 15,0; }, {}
+502, CactusPotion, Cactus Potion, 0, 70, 35, 70, , , , , , 10477567, 2, , , 0, , { itemheal 25,10; }, {}
+503, CasinoCoins, Casino Coins, 3, 20, 10, 1, , , , , , , , , , , , {}, {}
+504, DecorCandy, Decor Candy, 3, 25, 10, 10, , , , , , , , , , , , {}, {}
+505, MaggotSlime, Maggot Slime, 3, 8, 4, 10, , , , , , , , , , , , {}, {}
+506, CandyCane, Candy Cane, 0, 20, 10, 1, , , , , , 10477567, 2, , , 0, , { itemheal 5,0; }, {}
+507, ScorpionStinger, Scorpion Stinger, 3, 50, 25, 10, , , , , , , , , , , , {}, {}
+508, XmasCake, Xmas Cake, 0, 70, 10, 1, , , , , , 10477567, 2, , , 0, , { itemheal 10,0; }, {}
+509, ChocolateBar, Chocolate Bar, 0, 60, 20, 1, , , , , , 10477567, 2, , , 0, , { itemheal 20,0; }, {}
+510, Candy, Candy, 0, 20, 10, 1, , , , , , 10477567, 2, , , 0, , { itemheal 5,0; }, {}
+511, SantaHat, Santa Hat, 5, 400, 200, 200, , 2, , -2, 0, 10477567, 2, 256, , 0, 0, {}, {}
+512, GingerBreadMan, Ginger Bread Man, 0, 50, 25, 1, , , , , , 10477567, 2, , , 0, , { itemheal 25,0; }, {}
+513, Cake, Cake, 0, 30, 15, 1, , , , , , 10477567, 2, , , 0, , { itemheal 15,0; }, {}
+514, XmasCandyCane, Xmas Candy Cane, 0, 30, 15, 1, , , , , , 10477567, 2, , , 0, , { itemheal 10,0; }, {}
+515, PurplePresentBox, Purple Present Box, 3, 50, 25, 1, , , , , , , , , , , , {}, {}
+516, BluePresentBox, Blue Present Box, 3, 60, 30, 1, , , , , , , , , , , , {}, {}
+517, RedScorpionStinger, Red Scorpion Stinger, 3, 170, 85, 1, , , , , , , , , , , , {}, {}
+518, BugLeg, Bug Leg, 3, 60, 20, 1, , , , , , , , , , , , {}, {}
+519, CherryCake, Cherry Cake, 0, 100, 50, 1, , , , , , 10477567, 2, , , 0, , { itemheal 35,0; }, {}
+520, EasterEgg, Easter Egg, 0, 200, 100, 1, , , , , , 10477567, 2, , , 0, , { itemheal 100,0; }, {}
+521, Dagger, Dagger, 4, 1000, 500, 100, 15, , 1, , 0, 10477567, 2, 2, 1, 1, 1, {}, {}
+522, SharpKnife, Sharp Knife, 4, 100, 50, 100, 10, , 1, , 0, 10477567, 2, 2, 1, 1, 1, {}, {}
+523, LeatherShirt, Leather Shirt, 5, 2000, 1000, 100, , 4, , -12, 0, 10477567, 2, 512, , 0, 0, {}, {}
+524, FancyHat, Fancy Hat, 5, 1600, 800, 25, , 5, , 0, 0, 10477567, 2, 256, , 0, 0, {}, {}
+525, MinersHat, Miners Hat, 5, 800, 400, 200, , 4, , -8, 0, 10477567, 2, 256, , 0, 0, {}, {}
+526, CoinBag, Coin Bag, 3, 100, 50, 5, , , , , , , , , , , , {}, {}
+527, Milk, Milk, 0, 300, 150, 5, , , , , , 10477567, 2, , , 0, , { itemheal 150,0; }, {}
+528, Boots, Boots, 5, 8000, 500, 200, , 2, , -2, 0, 10477567, 2, 64, , 0, 0, {}, {}
+529, IronArrow, Iron Arrow, 10, 5, 2, 1, 50, , , , , 10477567, 2, 32768, , , , {}, {}
+530, ShortBow, Short Bow, 4, 3000, 500, 200, 50, , 5, , 0, 10477567, 2, 34, 1, 4, 11, {}, {}
+531, MinerGloves, Miner Gloves, 5, 3000, 1000, 20, , 2, , -10, 0, 10477567, 2, 4, , 0, 0, {}, {}
+532, LeatherGloves, Leather Gloves, 5, 6000, 2000, 30, , 4, , -20, 0, 10477567, 2, 4, , 0, 0, {}, {}
+533, RoastedMaggot, Roasted Maggot, 0, 110, 55, 5, , , , , , 10477567, 2, , , 0, , { itemheal 150,0; }, {}
+534, OrangeCupcake, Orange Cupcake, 0, 90, 45, 5, , , , , , 10477567, 2, , , 0, , { itemheal 100,10; }, {}
+535, Apple, Apple, 0, 10, 5, 5, , , , , , 10477567, 2, , , 0, , { itemheal 50,0; }, {}
+536, ShortSword, Short Sword, 4, 8000, 4000, 100, 100, , 1, , 0, 10477567, 2, 2, 1, 1, 1, {}, {}
+537, TreasureKey, Treasure Key, 3, 100, 50, 5, , , , , , , , , , , , {}, {}
+538, GreenPresentBox, Green Present Box, 0, 20, 10, 10, , , , , , 10477567, 2, , , 0, , {}, {}
+539, Beer, Beer, 0, 175, 87, 10, , , , , , 10477567, 2, , , 0, , { itemheal 200,5; }, {}
+540, Empty Bottle, Empty Bottle, 3, 20, 10, 10, , , , , , , , , , , , {}, {}
+541, BottleOfWater, Bottle of Water, 0, 200, 100, 10, , , , , , 10477567, 2, , , 0, , { itemheal 250,0; getitem 540,1; }, {}
+542, BottleOfSand, Bottle of Sand, 3, 70, 35, 10, , , , , , , , , , , , {}, {}
+543, StandardHeadband, Standard Headband, 5, 800, 400, 10, , 3, , -3, 0, 10477567, 2, 256, , 0, 0, {}, {}
+544, SilkHeadband, Silk Headband, 5, 5000, 2000, 10, , 10, , -10, 0, 10477567, 2, 256, , 0, 0, {}, {}
+545, ForestBow, Forest Bow, 4, 5000, 2500, 10, 70, , 5, , 0, 10477567, 2, 34, 1, 0, 11, {}, {}
+546, DesertShirt, Desert Shirt, 5, 2000, 1000, 10, , 6, , -18, 0, 10477567, 2, 512, , 0, 0, {}, {}
+547, Bardiche, Bardiche, 5, 20, 10, 10, , 100, , -200, 0, 0, 2, 2, , 0, 0, {}, {}
+548, Halberd, Halberd, 4, 20, 10, 10, 100, , 1, , 0, 0, 2, 2, 1, 0, 0, {}, {}
+549, Axe, Axe, 4, 20, 10, 10, 100, , 1, , 0, 0, 2, 2, 1, 0, 0, {}, {}
+550, BlacksmithsAxe, Blacksmith's Axe, 4, 20, 10, 10, 100, , 1, , 0, 0, 2, 2, 1, 0, 0, {}, {}
+551, Hint1, Hint, 3, 20, 0, 10, , , , , , , , , , , , {}, {}
+552, Hint2, Hint, 3, 20, 0, 10, , , , , , , , , , , , {}, {}
+553, Hint3, Hint, 3, 20, 0, 10, , , , , , , , , , , , {}, {}
+554, Hint4, Hint, 3, 20, 0, 10, , , , , , , , , , , , {}, {}
+555, Hint5, Hint, 3, 20, 0, 10, , , , , , , , , , , , {}, {}
+556, Hint6, Hint, 3, 20, 0, 10, , , , , , , , , , , , {}, {}
+557, Hint7, Hint, 3, 20, 0, 10, , , , , , , , , , , , {}, {}
+558, Hint8, Hint, 3, 20, 0, 10, , , , , , , , , , , , {}, {}
+559, Hint9, Hint, 3, 20, 0, 10, , , , , , , , , , , , {}, {}
+560, Hint10, Hint, 3, 20, 0, 10, , , , , , , , , , , , {}, {}
+561, Sabre, Sabre, 4, 10000, 5000, 100, 100, , 1, , 0, 10477567, 2, 2, 1, 1, 1, {}, {}
+562, ChickenLeg, Chicken Leg, 0, 250, 125, 10, , , , , , 10477567, 2, , , 0, , { itemheal 500,5; }, {}
+563, WinterGloves, Winter Gloves, 5, 6000, 3000, 20, , 3, , -15, 0, 10477567, 2, 4, , 0, 0, {}, {}
+564, TurtleneckSweater, Turtleneck Sweater, 5, 2000, 1000, 10, , 6, , -18, 0, 10477567, 2, 512, , 0, 0, {}, {}
+565, Petal, Petal, 0, 50, 25, 10, , , , , , 10477567, 2, , , 0, , { itemheal 50,5; }, {}
+566, SmallMushroom, Small Mushroom, 0, 50, 25, 10, , , , , , 10477567, 2, , , 0, , { itemheal 50,5; }, {}
+567, IronPotion, Iron Potion, 0, 500, 250, 10, , , , , , 10477567, 2, , , 0, , { sc_start 185, 90, 60; }, {}
+568, ConcentrationPotion, Concentration Potion, 0, 500, 250, 10, , , , , , 10477567, 2, , , 0, , { sc_start 37, 90, 30; }, {}
+569, RawLog, Raw Log, 3, 20 , 10, 10, , , , , , , , , , , {}, {}
+570, BoneKnife, Bone Knife, 4, 10000, 6000, 120, 115, , 1, , 0, 10477567, 2, 2, 1, 1, 1, {}, {}
+571, Setzer, Setzer, 4, 20000, 8000, 80, 110, , 1, , 0, 10477567, 2, 2, 1, 1, 3, {}, {}
+572, Scimitar, Scimitar, 4, 8000, 4000, 100, 100, , 1, , 0, 10477567, 2, 2, 1, 1, 1, {}, {}
+573, Falcion, Falcion, 4, 8000, 4000, 100, 100, , 1, , 0, 10477567, 2, 2, 1, 1, 1, {}, {}
+574, Scorpion, Scorpion, 4, 8000, 4000, 100, 100, , 1, , 0, 10477567, 2, 2, 1, 1, 1, {}, {}
+575, DesertBow, Desert Bow, 4, 8000, 4000, 100, 100, , 1, , 0, 10477567, 2, 34, 1, 1, 11, {}, {}
+576, Beheader, Beheader, 4, 8000, 4000, 100, 100, , 1, , 0, 10477567, 2, 2, 1, 1, 1, {}, {}
+577, BoneDarts, Bone Darts, 4, 8000, 4000, 100, 100, , 1, , 0, 10477567, 2, 2, 1, 1, 1, {}, {}
+578, SandCutter, Sand Cutter, 4, 8000, 4000, 100, 100, , 1, , 0, 10477567, 2, 2, 1, 1, 1, {}, {}
+579, RocKnife, Rock Knife, 4, 15000, 7500, 100, 300, , 1, , 0, 10477567, 2, 34, 1, 1, 1, {}, {}
+580, StaffOfLife, Staff of Life, 4, 8000, 4000, 100, 100, , 1, , 0, 10477567, 2, 2, 1, 1, 1, {}, {}
+581, SrescentRod, Crescent Rod, 4, 8000, 4000, 100, 100, , 1, , 0, 10477567, 2, 2, 1, 1, 1, {}, {}
+582, StaffOfFire, Staff of Fire, 4, 8000, 4000, 100, 100, , 1, , 0, 10477567, 2, 2, 1, 1, 1, {}, {}
+583, StaffOfIce, Staff of Ice, 4, 8000, 4000, 100, 100, , 1, , 0, 10477567, 2, 2, 1, 1, 1, {}, {}
+584, Jackal, Jackal, 4, 8000, 4000, 100, 100, , 1, , 0, 10477567, 2, 2, 1, 1, 1, {}, {}
+585, Scarabarmelt, Scarab Armlet, 5, 8000, 4000, 100, , 0, , 5, 0, 10477567, 2, 32, , 1, 1, {}, {}
+586, CottonShorts, Cotton Shorts, 5, 1000, 500, 10, , 2, , -4, 0, 10477567, 2, 1, , 1, 0, {}, {}
+601, SteelShield, Steel Shield, 5, 40000, 3000, 180, , 20, , -200, 0, 10477567, 2, 32, , , 0, {}, {}
+602, WoodenShield, Wooden Shield, 5, 10000, 2000, 100, , 14, , -70, 0, 10477567, 2, 32, , , 0, {}, {}
+603, LeatherShield, Leather Shield, 5, 2000, 1000, 60, , 7, , -35, 0, 10477567, 2, 32, , , 0, {}, {}
+610, JeansShorts, Jeans Shorts, 5, 2000, 1000, 10, , 4, , -8, 0, 10477567, 2, 1, , 0, 0, {}, {}
+611, WhiteFur, White Fur, 3, 8, 4, 10, , , , , , , , , , , , {}, {}
+612, CaveSnakeLamp, Cave Snake Lamp, 3, 80, 40, 10, , , , , , , , , , , , {}, {}
+613, HardSpike, Hard Spike, 3, 8, 4, 10, , , , , , , , , , , , {}, {}
+614, PinkAntenna, Pink Antenna, 3, 10, 5, 10, , , , , , , , , , , , {}, {}
+615, PumpkinHelmet, Pumpkin Helmet, 5, 2000, 1000, 10, , 4, , -4, 0, 10477567, 2, 256, , 0, 0, {}, {}
+616, AxeHat, Axe Hat, 5, 2000, 1000, 10, , 4, , -4, 0, 10477567, 2, 256, , 0, 0, {}, {}
+617, PirateHat, Pirate Hat, 5, 2000, 1000, 10, , 4, , -8, 0, 10477567, 2, 256, , 0, 0, {}, {}
+618, Goggles, Goggles, 5, 500, 100, 10, , 2, , 0, 0, 10477567, 2, 256, , 0, 0, {}, {}
+619, LeatherGoggles, Leather Goggles, 5, 1000, 500, 10, , 3, , 0, 0, 10477567, 2, 256, , 0, 0, {}, {}
+620, Circlet, Circlet, 5, 2000, 1000, 10, , 4, , 5, 0, 10477567, 2, 256, , 0, 0, {}, {}
+621, Eyepatch, Eyepatch, 5, 1000, 500, 10, , 3, , 0, 0, 10477567, 2, 256, , 0, 0, {}, {}
+622, Bandana, Bandana, 5, 1000, 500, 10, , 3, , 0, 0, 10477567, 2, 256, , 0, 0, {}, {}
+623, Scythe, Scythe, 4, 100, 50, 400, 75, , 1, , 0, 10477567, 2, 2, 1, 1, 3, {}, {}
+624, VNeckSweater, V-Neck Sweater, 5, 6000, 3000, 10, , 8, , -24, 0, 10477567, 2, 512, , 0, 0, {}, {}
+625, ChainmailShirt, Chainmail Shirt, 5, 15000, 1500, 250, , 20, , -120, 0, 10477567, 2, 512, , 0, 0, {}, {}
+626, LightPlatemail, Light Platemail, 5, 50000, 2500, 240, , 25, , -150, 0, 10477567, 2, 512, , 0, 0, {}, {}
+627, TopHat, Top Hat, 5, 2500, 1250, 10, , 10, , 2, 0, 10477567, 2, 256, , 0, 0, {}, {}
+628, FunkyHat, Funky Hat, 5, 3000, 1500, 10, , 13, , 2, 0, 10477567, 2, 256, , 0, 0, {}, {}
+629, MushHat, Mush Hat, 5, 2500, 1250, 10, , 10, , 0, 0, 10477567, 2, 256, , 0, 0, {}, {}
+630, ShroomHat, Shroom Hat, 5, 3000, 1500, 10, , 13, , 0, 0, 10477567, 2, 256, , 0, 0, {}, {}
+631, DarkCrystal, Dark Crystal, 3, 100, 50, 10, , , , , , , , , , , , {}, {}
+632, CottonSkirt, CottonSkirt, 5, 1000, 500, 10, , 4, , -8, 0, 10477567, 2, 1, , 1, 0, {}, {}
+633, ChristmasElfHat, Christmas Elf Hat, 5, 3000, 1500, 10, , 13, , 2, 0, 10477567, 2, 256, , 0, 0, {}, {}
+634, FaceMask, Face Mask, 5, 2500, 1250, 10, , 10, , 0, 0, 10477567, 2, 256, , 0, 0, {}, {}
+635, SantaCookie, Santa Cookie, 3, 1, 1, 1, , , , , , , , , , , , {}, {}
+636, WarlordHelmet, Warlord Helmet, 5, 30000, 3000, 10, , 18, , -36, 0, 10477567, 2, 256, , 0, 0, {}, {}
+637, KnightsHelmet, Knight's Helmet, 5, 20000, 2000, 10, , 15, , -30, 0, 10477567, 2, 256, , 0, 0, {}, {}
+638, InfantryHelmet, Infantry Helmet, 5, 15000, 1500, 10, , 15, , -30, 0, 10477567, 2, 256, , 0, 0, {}, {}
+639, CrusadeHelmet, Crusade Helmet, 5, 25000, 2500, 10, , 18, , -36, 0, 10477567, 2, 256, , 0, 0, {}, {}
+640, IronOre, Iron Ore, 3, 250, 100, 40, , , , , , , , , , , , {}, {}
+641, SnakeSkin, Snake Skin, 3, 250, 100, 20, , , , , , , , , , , , {}, {}
+642, JeansChaps, Jeans Chaps, 5, 2000, 1000, 40, , 6, , -12, 0, 10477567, 2, 1, , 0, 0, {}, {}
+643, CowboyWhite, White Cowboy Hat, 5, 1800, 900, 30, , 6, , -12, 0, 10477567, 2, 256, , 0, 0, {}, {}
+644, CowboyBlack, Black Cowboy Hat, 5, 1800, 900, 30, , 6, , -12, 0, 10477567, 2, 256, , 0, 0, {}, {}
+645, GoldenPlatemail, Golden Platemail, 5, 9999000,3000, 240, , 25, , -100, 0, 10477567, 2, 512, , 0, 0, {}, {}
+646, Crown, Crown, 5, 5000, 1000, 50, , 4, , 0, 0, 10477567, 2, 256, , 0, 0, {}, {}
+647, DevelopersCap, Developers Cap, 5, 2000, 500, 20, , 5, , 5, 0, 10477567, 2, 256, , 0, 0, {}, {}
+654, Cap, Cap, 5, 2000, 500, 20, , 5, , 0, 0, 10477567, 2, 256, , 0, 0, {}, {}
+655, FurBoots, Fur Boots, 5, 5000, 600, 250, , 3, , -3, 0, 10477567, 2, 64, , 0, 0, {}, {}
+656, SerfHat, Serf Hat, 5, 500, 100, 20, , 2, , 0, 0, 10477567, 2, 256, , 0, 0, {}, {}
+657, Orange, Orange, 0, 12, 6, 7, , , , , , 10477567, 2, , , 0, , { itemheal 60,0; }, {}
+658, WarlordPlate, Warlord Plate, 5, 100000, 3000, 275, , 27, , -170, 0, 10477567, 2, 512, , 0, 0, {}, {}
+659, GoldenWarlordPlate, Golden Warlord Plate, 5, 500000, 4000, 275, , 27, , -110, 0, 10477567, 2, 512, , 0, 0, {}, {}
+660, CottonCloth, Cotton Cloth, 3, 1000, 500, 40, , , , , , , , , , , , {}, {}
+661, RedRose, Red Rose, 3, 40, 20, 1, , , , , , , , , , , , {}, {}
+662, WhiteRose, White Rose, 3, 40, 20, 1, , , , , , , , , , , , {}, {}
+663, DarkRedRose, Dark Red Rose, 3, 40, 20, 1, , , , , , , , , , , , {}, {}
+664, PinkRose, Pink Rose, 3, 40, 20, 1, , , , , , , , , , , , {}, {}
+665, YellowRose, Yellow Rose, 3, 40, 20, 1, , , , , , , , , , , , {}, {}
+666, BlackRose, Black Rose, 3, 40, 20, 1, , , , , , , , , , , , {}, {}
+667, OrangeRose, Orange Rose, 3, 40, 20, 1, , , , , , , , , , , , {}, {}
+668, BlueRose, Blue Rose, 3, 40, 20, 1, , , , , , , , , , , , {}, {}
+669, YellowTulip, Yellow Tulip, 3, 40, 20, 1, , , , , , , , , , , , {}, {}
+670, PurpleTulip, Purple Tulip, 3, 40, 20, 1, , , , , , , , , , , , {}, {}
+671, RedTulip, Red Tulip, 3, 40, 20, 1, , , , , , , , , , , , {}, {}
+672, WhiteTulip, White Tulip, 3, 40, 20, 1, , , , , , , , , , , , {}, {}
+673, PinkTulip, Pink Tulip, 3, 40, 20, 1, , , , , , , , , , , , {}, {}
+674, OrangeTulip, Orange Tulip, 3, 40, 20, 1, , , , , , , , , , , , {}, {}
+675, GraduationCap, Graduation Cap, 5, 1000, 250, 20, , 2, , 0, 0, 10477567, 2, 256, , 0, 0, {}, {}
+676, Steak, Steak, 0, 275, 100, 10, , , , , , 10477567, 2, , , 0, , { itemheal 250,0; }, {}
+677, HeartNecklace, Heart Necklace, 3, 2500, 1000, 10, , , , , , , , , , 0, , {}, {}
+678, NohMask, Noh Mask, 5, 7000, 1000, 15, , 3, , 1, 0, 10477567, 2, 256, , 0, 0, {}, {}
+679, DemonMask, Demon Mask, 5, 10000, 5000, 15, , 3, , 5, 0, 10477567, 2, 256, , 0, 0, {}, {}
+680, MauveHerb, Mauve Herb, 3, 2, 1, 1, , , , , , , , , , , , {}, {}
+681, CobaltHerb, Cobalt Herb, 3, 2, 1, 1, , , , , , , , , , , , {}, {}
+682, GambogeHerb, Gamboge Herb, 3, 2, 1, 1, , , , , , , , , , , , {}, {}
+683, AlizarinHerb, Alizarin Herb, 3, 2, 1, 1, , , , , , , , , , , , {}, {}
+684, TinyHealingPotion, Tiny Healing Potion, 0, 25, 12, 5, , , , , , 10477567, 2, , , 0, , { itemheal 100,0; }, {}
+685, SmallHealingPotion, Small Healing Potion, 0, 50, 25, 10, , , , , , 10477567, 2, , , 0, , { itemheal 200,0; }, {}
+686, MediumHealingPotion, Medium Healing Potion, 0, 100, 50, 20, , , , , , 10477567, 2, , , 0, , { itemheal 400,0; }, {}
+687, LargeHealingPotion, Large Healing Potion, 0, 200, 100, 40, , , , , , 10477567, 2, , , 0, , { itemheal 800,0; }, {}
+688, WhiteTankTop, White Tank Top, 5, 10, 5, 100, , 2, , -4, 0, 10477567, 2, 512, , 0, 0, {}, {}
+689, WhiteShortTankTop, White Short Tank Top, 5, 10, 5, 100, , 2, , -4, 0, 10477567, 2, 512, , 0, 0, {}, {}
+690, RedDye, Red Dye, 3, 100, 20, 10, , , , , , 10477567, 2, , , 0, , {}, {}
+691, GreenDye, Green Dye, 3, 2500, 1000, 10, , , , , , 10477567, 2, , , 0, , {}, {}
+692, DarkBlueDye, Dark Blue Dye, 3, 40000, 15000, 10, , , , , , 10477567, 2, , , 0, , {}, {}
+693, YellowDye, Yellow Dye, 3, 100, 20, 10, , , , , , 10477567, 2, , , 0, , {}, {}
+694, LightBlueDye, Light Blue Dye, 3, 100, 20, 10, , , , , , 10477567, 2, , , 0, , {}, {}
+695, PinkDye, Pink Dye, 3, 2500, 1000, 10, , , , , , 10477567, 2, , , 0, , {}, {}
+696, BlackDye, Black Dye, 3, 30000, 25000, 10, , , , , , 10477567, 2, , , 0, , {}, {}
+697, OrangeDye, Orange Dye, 3, 2500, 1000, 10, , , , , , 10477567, 2, , , 0, , {}, {}
+698, PurpleDye, Purple Dye, 3, 70000, 50000, 10, , , , , , 10477567, 2, , , 0, , {}, {}
+699, DarkGreenDye, Dark Green Dye, 3, 2000, 1000, 10, , , , , , 10477567, 2, , , 0, , {}, {}
+700, Pearl, Pearl, 3, 5000, 3000, 5, , , , , , 10477567, 2, , , 0, , {}, {}
+701, PileOfAsh, Pile of Ash, 3, 3000, 500, 5, , , , , , 10477567, 2, , , 0, , {}, {}
+702, WeddingRing, Wedding Ring, 5, 1000, 1, 1, , 0, , 1, 0, 10477567, 2, 128, , 0, 0, {}, {}
+703, SulphurPowder, Sulphur Powder, 3, 1000, 100, 2, , , , , , 10477567, 2, , , 0, , {}, {}
+704, IronPowder, Iron Powder, 3, 800, 80, 3, , , , , , 10477567, 2, , , 0, , {}, {}
+706, GoldenScorpionStinger, Golden Scorpion Stinger, 3, 2000, 500, 2, , , , , , , , , , , , {}, {}
+707, MonsterOilPotion, Monster Oil Potion, 3, 10000, 2000, 50, , , , , , , , , , , , {}, {}
+708, LeatherPatch, Leather Patch, 3, 300, 150, 18, , , , , , , , , , , , {}, {}
+709, BlackScorpionStinger, Black Scorpion Stinger, 3, 250, 100, 1, , , , , , , , , , , , {}, {}
+710, SnakeTongue, Snake Tongue, 3, 120, 60, 1, , , , , , , , , , , , {}, {}
+711, MountainSnakeTongue, Mountain Snake Tongue, 3, 160, 80, 1, , , , , , , , , , , , {}, {}
+712, GrassSnakeTongue, Grass Snake Tongue, 3, 240, 120, 1, , , , , , , , , , , , {}, {}
+713, CaveSnakeTongue, Cave Snake Tongue, 3, 240, 120, 1, , , , , , , , , , , , {}, {}
+714, SnakeEgg, Snake Egg, 0, 100, 50, 4, , , , , , 10477567, 2, , , 0, , { itemheal 30,5; }, {}
+715, MountainSnakeEgg, Mountain Snake Egg, 0, 150, 75, 4, , , , , , 10477567, 2, , , 0, , { itemheal 40,5; }, {}
+716, GrassSnakeEgg, Grass Snake Egg, 0, 200, 100, 4, , , , , , 10477567, 2, , , 0, , { itemheal 50,5; }, {}
+717, CaveSnakeEgg, Cave Snake Egg, 0, 50, 25, 4, , , , , , 10477567, 2, , , 0, , { itemheal 20,5; }, {}
+718, SilkCocoon, Silk Cocoon, 3, 200, 3, 1, , , , , , , , , , , , {}, {}
+720, SilkRobe, Silk Robe, 5, 8000, 4000, 5, , 5, , 0, 0, 10477567, 2, 512, , 0, 0, {}, {}
+1199, Arrow, Arrow, 10, 3, 1, 1, 25, 0, 0, , 0, 10477567, 2, 32768, , , , {}, {}
+1200, Bow, Bow, 4, 1000, 500, 200, 20, , 5, , 0, 10477567, 2, 34, 1, 4, 11, {}, {}
+1201, Knife, Knife, 4, 50, 25, 100, 5, , 1, , 0, 10477567, 2, 2, 1, 1, 1, {}, {}
+1202, CottonShirt, Cotton Shirt, 5, 10, 5, 100, , 2, , -2, 0, 10477567, 2, 512, , 0, 0, {}, {}
+1203, RangerHat, Ranger Hat, 5, 1000, 500, 10, , 2, , -1, 0, 10477567, 2, 256, , 0, 0, {}, {}
+1204, AntlerHat, Antler Hat, 5, 1000, 500, 10, , 4, , 2, 0, 10477567, 2, 256, , 0, 0, {}, {}
+1205, ChristmasTreeHat, Christmas Tree Hat, 5, 2000, 1000, 10, , 2, , 4, 0, 10477567, 2, 256, , 0, 0, {}, {}
+1206, SantaBeardHat, Santa Beard Hat, 5, 1000, 500, 10, , 5, , 2, 0, 10477567, 2, 256, , 0, 0, {}, {}
+1207, RedChristmasStocking, Red Christmas Stocking, 3, 80, 40, 10, , , , , , , , , , , , {}, {}
+1208, RedEasterEgg, Red Easter Egg, 3, 80, 40, 10, , , , , , , , , , , , {}, {}
+1209, GreenEasterEgg, Green Easter Egg, 3, 80, 40, 10, , , , , , , , , , , , {}, {}
+1210, BlueEasterEgg, Blue Easter Egg, 3, 80, 40, 10, , , , , , , , , , , , {}, {}
+1211, YellowEasterEgg, Yellow Easter Egg, 3, 80, 40, 10, , , , , , , , , , , , {}, {}
+1212, PinkEasterEgg, Pink Easter Egg, 3, 80, 40, 10, , , , , , , , , , , , {}, {}
+1213, TealEasterEgg, Teal Easter Egg, 3, 80, 40, 10, , , , , , , , , , , , {}, {}
+1214, BunnyEars, Bunny Ears, 5, 5000, 2000, 10, , 10, , 1, 0, 10477567, 2, 256, , 0, 0, {}, {}
+1215, ToySabre, Toy Sabre, 4, 50, 25, 1, 1, , 1, , 0, 10477567, 2, 2, 1, 1, 1, {}, {}
+
+2050, RedCottonShirt, Red Cotton Shirt, 5, 10, 5, 100, , 2, , -4, 0, 10477567, 2, 512, , 0, 0, {}, {}
+2051, GreenCottonShirt, Green Cotton Shirt, 5, 10, 5, 100, , 2, , -4, 0, 10477567, 2, 512, , 0, 0, {}, {}
+2052, DarkBlueCottonShirt, Dark Blue Cotton Shirt, 5, 10, 5, 100, , 2, , -4, 0, 10477567, 2, 512, , 0, 0, {}, {}
+2053, YellowCottonShirt, Yellow Cotton Shirt, 5, 10, 5, 100, , 2, , -4, 0, 10477567, 2, 512, , 0, 0, {}, {}
+2054, LightBlueCottonShirt, Light Blue Cotton Shirt, 5, 10, 5, 100, , 2, , -4, 0, 10477567, 2, 512, , 0, 0, {}, {}
+2055, PinkCottonShirt, Pink Cotton Shirt, 5, 10, 5, 100, , 2, , -4, 0, 10477567, 2, 512, , 0, 0, {}, {}
+2056, BlackCottonShirt, Black Cotton Shirt, 5, 10, 5, 100, , 2, , -4, 0, 10477567, 2, 512, , 0, 0, {}, {}
+2057, OrangeCottonShirt, Orange Cotton Shirt, 5, 10, 5, 100, , 2, , -4, 0, 10477567, 2, 512, , 0, 0, {}, {}
+2058, PurpleCottonShirt, Purple Cotton Shirt, 5, 10, 5, 100, , 2, , -4, 0, 10477567, 2, 512, , 0, 0, {}, {}
+2059, DarkGreenCottonShirt, Dark Green Cotton Shirt, 5, 10, 5, 100, , 2, , -4, 0, 10477567, 2, 512, , 0, 0, {}, {}
+
+2060, RedVNeckSweaterRed, Red V-Neck Sweater, 5, 6000, 3000, 10, , 8, , -16, 0, 10477567, 2, 512, , 0, 0, {}, {}
+2061, GreenVNeckSweater, Green V-Neck Sweater, 5, 6000, 3000, 10, , 8, , -16, 0, 10477567, 2, 512, , 0, 0, {}, {}
+2062, DarkBlueVNeckSweater, Dark Blue V-Neck Sweater, 5, 6000, 3000, 10, , 8, , -16, 0, 10477567, 2, 512, , 0, 0, {}, {}
+2063, YellowVNeckSweater, Yellow V-Neck Sweater, 5, 6000, 3000, 10, , 8, , -16, 0, 10477567, 2, 512, , 0, 0, {}, {}
+2064, LightBlueVNeckSweater, Light Blue V-Neck Sweater, 5, 6000, 3000, 10, , 8, , -16, 0, 10477567, 2, 512, , 0, 0, {}, {}
+2065, PinkVNeckSweater, Pink V-Neck Sweater, 5, 6000, 3000, 10, , 8, , -16, 0, 10477567, 2, 512, , 0, 0, {}, {}
+2066, BlackVNeckSweater, Black V-Neck Sweater, 5, 6000, 3000, 10, , 8, , -16, 0, 10477567, 2, 512, , 0, 0, {}, {}
+2067, OrangeVNeckSweater, Orange V-Neck Sweater, 5, 6000, 3000, 10, , 8, , -16, 0, 10477567, 2, 512, , 0, 0, {}, {}
+2068, PurpleVNeckSweater, Purple V-Neck Sweater, 5, 6000, 3000, 10, , 8, , -16, 0, 10477567, 2, 512, , 0, 0, {}, {}
+2069, DarkGreenVNeckSweater, Dark Green V-Neck Sweater, 5, 6000, 3000, 10, , 8, , -16, 0, 10477567, 2, 512, , 0, 0, {}, {}
+
+2070, RedTNeckSweater, Red Turtleneck Sweater, 5, 2000, 1000, 10, , 6, , -12, 0, 10477567, 2, 512, , 0, 0, {}, {}
+2071, GreenTNeckSweater, Green Turtleneck Sweater, 5, 2000, 1000, 10, , 6, , -12, 0, 10477567, 2, 512, , 0, 0, {}, {}
+2072, DarkBlueTNeckSweater, Dark Blue Turtleneck Sweater, 5, 2000, 1000, 10, , 6, , -12, 0, 10477567, 2, 512, , 0, 0, {}, {}
+2073, YellowTNeckSweater, Yellow Turtleneck Sweater, 5, 2000, 1000, 10, , 6, , -12, 0, 10477567, 2, 512, , 0, 0, {}, {}
+2074, LightBlueTNeckSweater, Light Blue Turtleneck Sweater, 5, 2000, 1000, 10, , 6, , -12, 0, 10477567, 2, 512, , 0, 0, {}, {}
+2075, PinkTNeckSweater, Pink Turtleneck Sweater, 5, 2000, 1000, 10, , 6, , -12, 0, 10477567, 2, 512, , 0, 0, {}, {}
+2076, BlackTNeckSweater, Black Turtleneck Sweater, 5, 2000, 1000, 10, , 6, , -12, 0, 10477567, 2, 512, , 0, 0, {}, {}
+2077, OrangeTNeckSweater, Orange Turtleneck Sweater, 5, 2000, 1000, 10, , 6, , -12, 0, 10477567, 2, 512, , 0, 0, {}, {}
+2078, PurpleTNeckSweater, Purple Turtleneck Sweater, 5, 2000, 1000, 10, , 6, , -12, 0, 10477567, 2, 512, , 0, 0, {}, {}
+2079, DarkGreenTNeckSweater, Dark Green Turtleneck Sweater, 5, 2000, 1000, 10, , 6, , -12, 0, 10477567, 2, 512, , 0, 0, {}, {}
+
+2080, RedSilkRobe, Red Silk Robe, 5, 8000, 4000, 5, , 5, , 0, 0, 10477567, 2, 512, , 0, 0, {}, {}
+2081, GreenSilkRobe, Green Silk Robe, 5, 8000, 4000, 5, , 5, , 0, 0, 10477567, 2, 512, , 0, 0, {}, {}
+2082, DarkBlueSilkRobe, Dark Blue Silk Robe, 5, 8000, 4000, 5, , 5, , 0, 0, 10477567, 2, 512, , 0, 0, {}, {}
+2083, YellowSilkRobe, Yellow Silk Robe, 5, 8000, 4000, 5, , 5, , 0, 0, 10477567, 2, 512, , 0, 0, {}, {}
+2084, LightBlueSilkRobe, Light Blue Silk Robe, 5, 8000, 4000, 5, , 5, , 0, 0, 10477567, 2, 512, , 0, 0, {}, {}
+2085, PinkSilkRobe, Pink Silk Robe, 5, 8000, 4000, 5, , 5, , 0, 0, 10477567, 2, 512, , 0, 0, {}, {}
+2086, BlackSilkRobe, Black Silk Robe, 5, 8000, 4000, 5, , 5, , 0, 0, 10477567, 2, 512, , 0, 0, {}, {}
+2087, OrangeSilkRobe, Orange Silk Robe, 5, 8000, 4000, 5, , 5, , 0, 0, 10477567, 2, 512, , 0, 0, {}, {}
+2088, PurpleSilkRobe, Purple Silk Robe, 5, 8000, 4000, 5, , 5, , 0, 0, 10477567, 2, 512, , 0, 0, {}, {}
+2089, DarkGreenSilkRobe, Dark Green Silk Robe, 5, 8000, 4000, 5, , 5, , 0, 0, 10477567, 2, 512, , 0, 0, {}, {}
+
+2090, RedTankTop, Red Tank Top, 5, 10, 5, 100, , 2, , -4, 0, 10477567, 2, 512, , 0, 0, {}, {}
+2091, GreenTankTop, Green Tank Top, 5, 10, 5, 100, , 2, , -4, 0, 10477567, 2, 512, , 0, 0, {}, {}
+2092, DarkBlueTankTop, Dark Blue Tank Top, 5, 10, 5, 100, , 2, , -4, 0, 10477567, 2, 512, , 0, 0, {}, {}
+2093, YellowTankTop, Yellow Tank Top, 5, 10, 5, 100, , 2, , -4, 0, 10477567, 2, 512, , 0, 0, {}, {}
+2094, LightBlueTankTop, Light Blue Tank Top, 5, 10, 5, 100, , 2, , -4, 0, 10477567, 2, 512, , 0, 0, {}, {}
+2095, PinkTankTop, Pink Tank Top, 5, 10, 5, 100, , 2, , -4, 0, 10477567, 2, 512, , 0, 0, {}, {}
+2096, BlackTankTop, Black Tank Top, 5, 10, 5, 100, , 2, , -4, 0, 10477567, 2, 512, , 0, 0, {}, {}
+2097, OrangeTankTop, Orange Tank Top, 5, 10, 5, 100, , 2, , -4, 0, 10477567, 2, 512, , 0, 0, {}, {}
+2098, PurpleTankTop, Purple Tank Top, 5, 10, 5, 100, , 2, , -4, 0, 10477567, 2, 512, , 0, 0, {}, {}
+2099, DarkGreenTankTop, Dark Green Tank Top, 5, 10, 5, 100, , 2, , -4, 0, 10477567, 2, 512, , 0, 0, {}, {}
+
+2100, RedCottonSkirt, Red Cotton Skirt, 5, 1000, 500, 10, , 4, , -8, 0, 10477567, 2, 1, , 1, 0, {}, {}
+2101, GreenCottonSkirt, Green Cotton Skirt, 5, 1000, 500, 10, , 4, , -8, 0, 10477567, 2, 1, , 1, 0, {}, {}
+2102, DarkBlueCottonSkirt, Dark Blue Cotton Skirt, 5, 1000, 500, 10, , 4, , -8, 0, 10477567, 2, 1, , 1, 0, {}, {}
+2103, YellowCottonSkirt, Yellow Cotton Skirt, 5, 1000, 500, 10, , 4, , -8, 0, 10477567, 2, 1, , 1, 0, {}, {}
+2104, LightBlueCottonSkirt, Light Blue Cotton Skirt, 5, 1000, 500, 10, , 4, , -8, 0, 10477567, 2, 1, , 1, 0, {}, {}
+2105, PinkCottonSkirt, Pink Cotton Skirt, 5, 1000, 500, 10, , 4, , -8, 0, 10477567, 2, 1, , 1, 0, {}, {}
+2106, BlackCottonSkirt, Black Cotton Skirt, 5, 1000, 500, 10, , 4, , -8, 0, 10477567, 2, 1, , 1, 0, {}, {}
+2107, OrangeCottonSkirt, Orange Cotton Skirt, 5, 1000, 500, 10, , 4, , -8, 0, 10477567, 2, 1, , 1, 0, {}, {}
+2108, PurpleCottonSkirt, Purple Cotton Skirt, 5, 1000, 500, 10, , 4, , -8, 0, 10477567, 2, 1, , 1, 0, {}, {}
+2109, DarkGreenCottonSkirt, Dark Green Cotton Skirt, 5, 1000, 500, 10, , 4, , -8, 0, 10477567, 2, 1, , 1, 0, {}, {}
+
+2110, RedCottonShorts, Red Cotton Shorts, 5, 1000, 500, 10, , 2, , -4, 0, 10477567, 2, 1, , 1, 0, {}, {}
+2111, GreenCottonShorts, Green Cotton Shorts, 5, 1000, 500, 10, , 2, , -4, 0, 10477567, 2, 1, , 1, 0, {}, {}
+2112, DarkBlueCottonShorts, Dark Blue Cotton Shorts, 5, 1000, 500, 10, , 2, , -4, 0, 10477567, 2, 1, , 1, 0, {}, {}
+2113, YellowCottonShorts, Yellow Cotton Shorts, 5, 1000, 500, 10, , 2, , -4, 0, 10477567, 2, 1, , 1, 0, {}, {}
+2114, LightBlueCottonShorts, Light Blue Cotton Shorts, 5, 1000, 500, 10, , 2, , -4, 0, 10477567, 2, 1, , 1, 0, {}, {}
+2115, PinkCottonShorts, Pink Cotton Shorts, 5, 1000, 500, 10, , 2, , -4, 0, 10477567, 2, 1, , 1, 0, {}, {}
+2116, BlackCottonShorts, Black Cotton Shorts, 5, 1000, 500, 10, , 2, , -4, 0, 10477567, 2, 1, , 1, 0, {}, {}
+2117, OrangeCottonShorts, Orange Cotton Shorts, 5, 1000, 500, 10, , 2, , -4, 0, 10477567, 2, 1, , 1, 0, {}, {}
+2118, PurpleCottonShorts, Purple Cotton Shorts, 5, 1000, 500, 10, , 2, , -4, 0, 10477567, 2, 1, , 1, 0, {}, {}
+2119, DarkGreenCottonShorts, Dark Green Cotton Shorts, 5, 1000, 500, 10, , 2, , -4, 0, 10477567, 2, 1, , 1, 0, {}, {}
+
+2120, RedShortTankTop, Red Short Tank Top, 5, 10, 5, 100, , 2, , -4, 0, 10477567, 2, 512, , 0, 0, {}, {}
+2121, GreenShortTankTop, Green Short Tank Top, 5, 10, 5, 100, , 2, , -4, 0, 10477567, 2, 512, , 0, 0, {}, {}
+2122, DarkBlueShortTankTop, Dark Blue Short Tank Top, 5, 10, 5, 100, , 2, , -4, 0, 10477567, 2, 512, , 0, 0, {}, {}
+2123, YellowShortTankTop, Yellow Short Tank Top, 5, 10, 5, 100, , 2, , -4, 0, 10477567, 2, 512, , 0, 0, {}, {}
+2124, LightBlueShortTankTop, Light Blue Short Tank Top, 5, 10, 5, 100, , 2, , -4, 0, 10477567, 2, 512, , 0, 0, {}, {}
+2125, PinkShortTankTop, Pink Short Tank Top, 5, 10, 5, 100, , 2, , -4, 0, 10477567, 2, 512, , 0, 0, {}, {}
+2126, BlackShortTankTop, Black Short Tank Top, 5, 10, 5, 100, , 2, , -4, 0, 10477567, 2, 512, , 0, 0, {}, {}
+2127, OrangeShortTankTop, Orange Short Tank Top, 5, 10, 5, 100, , 2, , -4, 0, 10477567, 2, 512, , 0, 0, {}, {}
+2128, PurpleShortTankTop, Purple Short Tank Top, 5, 10, 5, 100, , 2, , -4, 0, 10477567, 2, 512, , 0, 0, {}, {}
+2129, DarkGreenShortTankTop, Dark Green Short Tank Top, 5, 10, 5, 100, , 2, , -4, 0, 10477567, 2, 512, , 0, 0, {}, {}
diff --git a/db/job_db1.txt b/db/job_db1.txt
index 3c832cd4..4278d78d 100644
--- a/db/job_db1.txt
+++ b/db/job_db1.txt
@@ -1,6 +1,6 @@
//weight,hp,hp2,sp,aspd*17(‘fŽè,’ZŒ•,•ÐŽèŒ•,—¼ŽèŒ•,•ÐŽè‘„,—¼Žè‘„,•ÐŽè•€,—¼Žè•€,•ÐŽè“ÝŠí,—¼Žè“ÝŠí,ñ,‹|,’Ü,ŠyŠí,•Ú,–{,ƒJƒ^[ƒ‹)
//x NOV,SWO,MAG,ARC,ACO,MER,THI,KNI,PRI,WIZ,BLA,HUN,ASS,KNIp,CRU,MON,SAG,ROG,ALC,BAR,DAN,CRUp,WED,SNV
-20000, 0,500,100, 650, 700, 750,800,2000,2000, 800,2000, 700, 700, 650,900,2000,2000,2000,2000,2000
+20000, 0,500,100, 650, 700, 750,600,2000,2000, 800,2000, 700, 700, 650,900,2000,2000,2000,2000,2000
28000, 70,500,200, 400, 500, 550, 600, 650, 700, 700, 750, 650, 700,2000,2000,2000,2000,2000,2000,2000
22000, 30,500,600, 500, 600,2000,2000,2000,2000,2000,2000,2000,2000, 700,2000,2000,2000,2000,2000,2000
26000, 50,500,200, 400, 600,2000,2000,2000,2000,2000,2000,2000,2000,2000, 700,2000,2000,2000,2000,2000
diff --git a/db/mob_db.txt b/db/mob_db.txt
index 33f369d8..5e22078b 100644
--- a/db/mob_db.txt
+++ b/db/mob_db.txt
@@ -1,27 +1,38 @@
# ID, Name, JName, LV, HP, SP, EXP, JEXP, Range1, ATK1, ATK2, DEF, MDEF, STR, AGI, VIT, INT, DEX, LUK, Range2, Range3, Scale, Race, Element, Mode, Speed, ADelay, AMotion, DMotion, Drop1id, Drop1per, Drop2id, Drop2per, Drop3id, Drop3per, Drop4id, Drop4per, Drop5id, Drop5per, Drop6id, Drop6per, Drop7id, Drop7per, Drop8id, Drop8per, Item1, Item2, MEXP, ExpPer, MVP1id, MVP1per, MVP2id, MVP2per, MVP3id, MVP3per
-1002, Maggot, Maggot, 5, 50, 0, 10, 2, 1, 5, 10, 0, 5, 1, 1, 1, 0, 6, 30, 1, 1, 1, 3, 21, 129, 800, 1872, 672, 480, 505, 800, 501, 150, 518, 400, 533, 150, 502, 70, 522, 1, 0, 0, 0, 0, 0, 0, 0, 0, , , , , ,
-1003, Scorpion, Scorpion, 10, 100, 0, 25, 4, 1, 10, 15, 0, 5, 1, 1, 1, 0, 15, 30, 1, 1, 1, 3, 21, 129, 2000, 1872, 672, 480, 507, 700, 510, 100, 509, 50, 518, 700, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, , , , , ,
-1004, RedScorpion, Red Scorpion, 90, 550, 0, 200, 145, 1, 50, 55, 4, 6, 10, 8, 10, 10, 30, 10, 1, 1, 1, 0, 20, 129, 1000, 1872, 672, 480, 517, 2000, 509, 100, 518, 500, 1200, 10, 1199, 760, 1201, 540, 524, 5, 0, 0, 0, 0, 0, 0, , , , , ,
-1005, GreenSlime, Green Slime, 40, 300, 0, 80, 8, 1, 25, 30, 2, 7, 1, 25, 1, 0, 30, 30, 1, 1, 1, 0, 20, 131, 1500, 1872, 672, 480, 502, 200, 513, 100, 501, 100, 521, 100, 522, 190, 526, 10, 503, 500, 535, 750, 0, 0, 0, 0, , , , , ,
-1006, GiantMaggot, Giant Maggot, 80, 500, 0, 180, 16, 2, 45, 50, 2, 7, 10, 6, 2, 1, 22, 1, 2, 2, 1, 0, 20, 129, 2000, 1872, 672, 480, 1199, 900, 519, 100, 518, 750, 501, 5000, 502, 3000, 503, 11, 526, 10, 0, 0, 0, 0, 0, 0, , , , , ,
-1007, YellowSlime, Yellow Slime, 60, 400, 0, 140, 2, 1, 35, 40, 2, 7, 10, 6, 2, 1, 34, 1, 1, 1, 1, 0, 20, 131, 1400, 1800, 672, 480, 534, 200, 519, 100, 501, 350, 502, 250, 522, 10, 640, 150, 0, 0, 0, 0, 0, 0, 0, 0, , , , , ,
-1008, RedSlime, Red Slime, 70, 450, 0, 160, 56, 1, 40, 45, 2, 7, 15, 8, 2, 1, 25, 1, 1, 1, 1, 0, 20, 135, 1300, 1500, 672, 480, 1201, 300, 509, 110, 521, 200, 523, 40, 525, 80, 535, 750, 528, 250, 531, 150, 0, 0, 0, 0, , , , , ,
-1009, BlackScorpion, Black Scorpion, 100, 600, 0, 270, 70, 1, 60, 65, 4, 6, 20, 15, 10, 10, 35, 10, 1, 1, 1, 0, 20, 133, 1000, 1500, 672, 480, 523, 150, 509, 100, 518, 800, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, , , , , ,
-1010, Snake, Snake, 150, 850, 0, 400, 100, 1, 75, 90, 4, 6, 20, 15, 10, 10, 35, 10, 1, 1, 1, 0, 20, 133, 1000, 1500, 672, 480, 524, 300, 638, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, , , , , ,
-1011, FireGoblin, Fire Goblin, 20, 200, 0, 40, 2, 1, 15, 20, 0, 5, 1, 1, 1, 0, 6, 30, 1, 1, 1, 3, 21, 129, 800, 1872, 672, 480, 505, 800, 501, 150, 518, 800, 502, 150, 521, 70, 522, 1, 0, 0, 0, 0, 0, 0, 0, 0, , , , , ,
-1012, Spider, Spider, 140, 800, 0, 375, 280, 1, 70, 85, 4, 6, 20, 15, 10, 10, 35, 10, 1, 1, 1, 0, 25, 175, 1000, 1500, 672, 480, 537, 500, 535, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, , , , , ,
-1013, EvilMushroom, Evil Mushroom, 110, 650, 0, 350, 110, 1, 65, 70, 4, 6, 20, 15, 10, 10, 35, 10, 1, 1, 1, 3, 25, 137, 800, 1800, 672, 480, 535, 500, 540, 5, 534, 100, 566, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, , , , , ,
-1014, SleepFlower, Sleep Flower, 120, 700, 0, 375, 110, 1, 70, 75, 0, 5, 20, 15, 20, 20, 20, 20, 1, 1, 1, 3, 25, 128, 800, 800, 672, 480, 535, 100, 540, 5, 1199, 100, 526, 400, 565, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, , , , , ,
-1015, SantaSlime, Santa Slime, 130, 750, 0, 325, 0, 1, 75, 80, 2, 7, 1, 25, 1, 0, 30, 30, 1, 1, 1, 0, 20, 161, 1500, 1872, 672, 480, 512, 800, 513, 700, 514, 600, 519, 500, 527, 400, 538, 500, 0, 0, 0, 0, 0, 0, 0, 0, , , , , ,
-1016, RudolphSlime, Rudolph Slime, 50, 350, 0, 120, 16, 1, 30, 35, 2, 7, 1, 25, 1, 0, 30, 30, 1, 1, 1, 0, 20, 131, 1000, 1872, 672, 480, 504, 800, 506, 500, 508, 200, 509, 300, 510, 600, 515, 800, 516, 500, 0, 0, 0, 0, 0, 0, , , , , ,
-1017, Bat, Bat, 20, 150, 0, 55, 2, 1, 7, 10, 0, 5, 1, 1, 1, 0, 20, 25, 1, 1, 1, 3, 21, 129, 800, 1872, 672, 480, 505, 800, 501, 150, 518, 400, 533, 150, 521, 70, 522, 1, 0, 0, 0, 0, 0, 0, 0, 0, , , , , ,
-1018, Violet, Violet, 30, 500, 0, 75, 3, 1, 7, 10, 0, 5, 1, 1, 1, 0, 20, 25, 1, 1, 1, 3, 21, 129, 800, 1872, 672, 480, 614, 800, 0, 150, 0, 400, 0, 150, 0, 70, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, , , , , ,
-1019, Shroom, Shroom, 30, 300, 0, 65, 4, 1, 10, 13, 0, 5, 1, 1, 1, 0, 10, 10, 1, 1, 1, 3, 21, 129, 800, 1872, 672, 480, 567, 800, 501, 150, 518, 50, 613, 150, 0, 70, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, , , , , ,
-1020, Fluffy, Fluffy, 30, 500, 0, 55, 3, 1, 10, 12, 0, 5, 1, 1, 1, 0, 20, 25, 1, 1, 1, 3, 21, 129, 800, 1872, 672, 480, 611, 800, 527, 150, 535, 400, 0, 150, 0, 70, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, , , , , ,
-1021, LampSnake, Lamp Snake, 30, 1000, 0, 120, 5, 1, 20, 15, 1, 5, 10, 1, 1, 0, 10, 10, 1, 1, 1, 3, 21, 129, 800, 1872, 672, 480, 612, 800, 610, 20, 0, 400, 0, 150, 0, 70, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, , , , , ,
-1022, JackO, JackO, 50, 6000, 0, 5000, 5000, 1, 40, 100, 20, 6, 20, 10, 10, 10, 30, 10, 1, 1, 1, 0, 20, 133, 250, 1500, 672, 480, 617, 5000, 622, 5000, 624, 5000, 620, 5000, 615, 5000, 1203, 5000, 524, 5000, 616, 5000, 0, 0, 0, 0, , , , , ,
-1023, FireSkull, Fire Skull, 30, 500, 0, 75, 2, 1, 10, 12, 0, 5, 1, 1, 1, 0, 15, 10, 1, 1, 1, 3, 21, 129, 800, 1872, 672, 480, 631, 1000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, , , , , ,
-1024, PoisonSkull, Poison skull, 30, 1000, 0, 85, 5, 1, 20, 20, 0, 5, 1, 1, 1, 0, 15, 10, 1, 1, 1, 3, 21, 129, 800, 1872, 672, 480, 631, 1000, 0, 0 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, , , , , ,
-1025, Stumpy, Stumpy, 30, 500, 0, 75, 30, 1, 7, 10, 50, 5, 1, 1, 1, 0, 20, 25, 1, 1, 1, 3, 21, 129, 800, 1872, 672, 480, 569, 2000, 0, 150, 0, 400, 0, 150, 0, 70, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, , , , , ,
-1026, MountainSnake, Mountain Snake, 160, 900, 0, 500, 100, 1, 80, 95, 4, 6, 20, 15, 10, 10, 35, 10, 1, 1, 1, 0, 20, 133, 1000, 1500, 672, 480, 532, 20, 641, 150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, , , , , ,
-1027, EasterFluffy, EasterFluffy, 30, 500, 0, 55, 3, 1, 10, 12, 0, 5, 1, 1, 1, 0, 20, 25, 1, 1, 1, 3, 21, 129, 800, 1872, 672, 480, 1208, 2000, 1209, 2000, 1210, 2000, 1211, 1000, 1212, 1000, 1213, 200, 0, 0, 0, 0, 0, 0, 0, 0, , , , , ,
+1002, Maggot, Maggot, 5, 50, 0, 10, 2, 1, 5, 10, 0, 5, 1, 1, 1, 0, 6, 30, 1, 1, 1, 3, 21, 129, 800, 1872, 672, 480, 505, 800, 501, 150, 518, 400, 533, 150, 502, 70, 522, 10, 0, 0, 0, 0, 0, 0, 0, 0, , , , , ,
+1003, Scorpion, Scorpion, 10, 100, 0, 25, 4, 1, 10, 15, 0, 5, 1, 1, 1, 0, 15, 30, 1, 1, 1, 3, 20, 129, 2000, 1872, 672, 480, 507, 700, 510, 100, 509, 50, 518, 700, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, , , , , ,
+1004, RedScorpion, Red Scorpion, 90, 550, 0, 200, 145, 1, 50, 55, 4, 6, 8, 8, 10, 10, 30, 10, 1, 1, 1, 0, 20, 129, 1000, 1872, 672, 480, 517, 2000, 509, 100, 518, 500, 1200, 10, 1199, 760, 1201, 540, 524, 25, 0, 0, 0, 0, 0, 0, , , , , ,
+1005, GreenSlime, Green Slime, 40, 300, 0, 80, 8, 1, 25, 30, 2, 7, 1, 25, 1, 0, 30, 30, 1, 1, 1, 0, 21, 131, 1500, 1872, 672, 480, 502, 200, 513, 100, 501, 100, 521, 100, 522, 190, 526, 10, 503, 500, 535, 750, 0, 0, 0, 0, , , , , ,
+1006, GiantMaggot, Giant Maggot, 80, 500, 0, 180, 16, 2, 45, 50, 2, 7, 8, 6, 2, 1, 22, 1, 2, 2, 1, 0, 41, 129, 2000, 1872, 672, 480, 1199, 900, 519, 100, 518, 750, 501, 5000, 502, 3000, 503, 11, 526, 20, 0, 0, 0, 0, 0, 0, , , , , ,
+1007, YellowSlime, Yellow Slime, 60, 400, 0, 140, 2, 1, 35, 40, 2, 7, 9, 6, 2, 1, 34, 1, 1, 1, 1, 0, 21, 131, 1400, 1800, 672, 480, 534, 200, 519, 100, 501, 350, 502, 250, 522, 10, 640, 150, 0, 0, 0, 0, 0, 0, 0, 0, , , , , ,
+1008, RedSlime, Red Slime, 70, 450, 0, 160, 56, 1, 40, 45, 2, 7, 12, 8, 2, 1, 25, 1, 1, 1, 1, 0, 21, 135, 1300, 1500, 672, 480, 1201, 300, 509, 110, 521, 200, 523, 80, 525, 80, 535, 750, 528, 250, 531, 150, 0, 0, 0, 0, , , , , ,
+1009, BlackScorpion, Black Scorpion, 100, 600, 0, 270, 70, 1, 60, 65, 4, 6, 16, 10, 10, 10, 35, 10, 1, 1, 1, 0, 20, 133, 1000, 1500, 672, 480, 523, 150, 509, 100, 518, 800, 709, 800, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, , , , , ,
+1010, Snake, Snake, 115, 850, 0, 400, 100, 1, 75, 90, 4, 6, 20, 11, 10, 10, 35, 10, 1, 1, 1, 0, 20, 133, 1000, 1500, 672, 480, 524, 300, 638, 20, 714, 400, 714, 400, 710, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, , , , , ,
+
+1011, FireGoblin, Fire Goblin, 20, 200, 0, 40, 2, 1, 15, 20, 0, 5, 1, 1, 1, 0, 6, 30, 1, 1, 1, 3, 23, 129, 800, 1872, 672, 480, 505, 800, 501, 150, 518, 800, 502, 150, 521, 70, 522, 10, 701, 500, 0, 0, 0, 0, 0, 0, , , , , ,
+1012, Spider, Spider, 130, 800, 0, 375, 280, 1, 70, 85, 4, 6, 14, 13, 10, 10, 35, 10, 1, 1, 1, 0, 25, 175, 1000, 1500, 672, 480, 537, 500, 535, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, , , , , ,
+1013, EvilMushroom, Evil Mushroom, 110, 650, 0, 350, 110, 1, 65, 70, 4, 6, 16, 12, 10, 10, 35, 10, 1, 1, 1, 3, 22, 137, 800, 1800, 672, 480, 535, 500, 540, 10, 534, 100, 566, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, , , , , ,
+1014, Flower, Flower, 115, 700, 0, 375, 110, 2, 70, 75, 0, 5, 16, 12, 20, 20, 20, 20, 2, 2, 1, 3, 22, 128, 800, 800, 672, 480, 535, 100, 540, 10, 1199, 100, 526, 400, 565, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, , , , , ,
+1015, SantaSlime, Santa Slime, 120, 750, 0, 325, 0, 1, 75, 80, 2, 7, 1, 20, 1, 0, 30, 30, 1, 1, 1, 0, 21, 161, 1500, 1872, 672, 480, 512, 800, 513, 700, 514, 600, 519, 500, 527, 400, 538, 500, 0, 0, 0, 0, 0, 0, 0, 0, , , , , ,
+1016, RudolphSlime, Rudolph Slime, 50, 350, 0, 120, 16, 1, 30, 35, 2, 7, 1, 20, 1, 0, 30, 30, 1, 1, 1, 0, 21, 131, 1000, 1872, 672, 480, 504, 800, 506, 500, 508, 200, 509, 300, 510, 600, 515, 800, 516, 500, 0, 0, 0, 0, 0, 0, , , , , ,
+
+1017, Bat, Bat, 20, 150, 0, 55, 2, 1, 7, 10, 0, 5, 1, 1, 1, 0, 20, 25, 1, 1, 1, 3, 24, 129, 800, 1872, 672, 480, 505, 800, 501, 150, 518, 400, 533, 150, 521, 70, 522, 1, 0, 0, 0, 0, 0, 0, 0, 0, , , , , ,
+1018, Pinkie, Pinkie, 30, 500, 0, 75, 3, 2, 7, 10, 0, 5, 1, 1, 1, 0, 20, 25, 2, 2, 1, 3, 20, 129, 800, 1872, 672, 480, 614, 800, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, , , , , ,
+1019, SpikyMushroom, Spiky Mushroom, 30, 300, 0, 65, 4, 1, 10, 13, 0, 5, 1, 1, 1, 0, 10, 10, 1, 1, 1, 3, 20, 129, 800, 1872, 672, 480, 567, 800, 501, 150, 518, 50, 613, 150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, , , , , ,
+1020, Fluffy, Fluffy, 30, 500, 0, 75, 3, 1, 10, 12, 0, 5, 1, 1, 1, 0, 20, 25, 1, 1, 1, 3, 20, 129, 800, 1872, 672, 480, 611, 800, 527, 150, 535, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, , , , , ,
+1021, CaveSnake, Cave Snake, 30, 1000, 0, 120, 5, 1, 20, 15, 1, 5, 10, 1, 1, 0, 10, 10, 1, 1, 1, 3, 20, 129, 800, 1872, 672, 480, 612, 800, 610, 40, 713, 500, 717, 400, 717, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, , , , , ,
+1022, JackO, Jack O, 50, 10000, 0, 5000, 5000, 2, 150, 200, 35, 20, 35, 30, 25, 25, 35, 15, 1, 1, 1, 0, 20, 133, 250, 1500, 672, 480, 617, 300, 622, 400, 624, 400, 620, 400, 615, 300, 1203, 400, 524, 700, 616, 600, 0, 0, 0, 0, , , , , ,
+1023, FireSkull, Fire Skull, 30, 500, 0, 75, 2, 1, 10, 12, 0, 5, 1, 1, 1, 0, 15, 10, 1, 1, 1, 3, 23, 129, 800, 1872, 672, 480, 631, 1000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, , , , , ,
+1024, PoisonSkull, Poison Skull, 30, 1000, 0, 85, 5, 1, 20, 20, 0, 5, 1, 1, 1, 0, 15, 10, 1, 1, 1, 3, 25, 129, 800, 1872, 672, 480, 631, 1000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, , , , , ,
+1025, LogHead, Log Head, 30, 500, 0, 75, 30, 1, 7, 10, 50, 5, 1, 1, 1, 0, 20, 25, 1, 1, 1, 3, 22, 129, 800, 1872, 672, 480, 569, 2000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, , , , , ,
+
+1026, MountainSnake, Mountain Snake, 140, 900, 0, 500, 100, 1, 80, 95, 4, 6, 20, 11, 10, 10, 35, 10, 1, 1, 1, 0, 20, 133, 1000, 1500, 672, 480, 532, 20, 641, 150, 715, 400, 715, 400, 711, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, , , , , ,
+1027, EasterFluffy, Easter Fluffy, 30, 500, 0, 55, 3, 1, 10, 12, 0, 5, 1, 1, 1, 0, 20, 25, 1, 1, 1, 3, 20, 129, 800, 1872, 672, 480, 1208, 2000, 1209, 2000, 1210, 2000, 1211, 1000, 1212, 1000, 1213, 200, 0, 0, 0, 0, 0, 0, 0, 0, , , , , ,
+1028, Mouboo, Mouboo, 85, 1200, 0, 600, 40, 2, 55, 75, 40, 5, 15, 5, 15, 0, 25, 10, 2, 2, 1, 3, 20, 129, 600, 1872, 672, 480, 660, 200, 660, 100, 541, 750, 660, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, , , , , ,
+1029, MauvePlant, Mauve Plant, 1, 1, 0, 1, 1, 1, 0, 0, 100, 100, 0, 0, 0, 0, 0, 0, 1, 1, 1, 3, 22, 0, 800, 800, 672, 480, 680, 3000, 680, 3000, 680, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, , , , , ,
+1030, CobaltPlant, Cobalt Plant, 1, 1, 0, 1, 1, 1, 0, 0, 100, 100, 0, 0, 0, 0, 0, 0, 1, 1, 1, 3, 22, 0, 800, 800, 672, 480, 681, 3000, 681, 3000, 681, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, , , , , ,
+1031, GambogePlant, Gamboge Plant, 1, 1, 0, 1, 1, 1, 0, 0, 100, 100, 0, 0, 0, 0, 0, 0, 1, 1, 1, 3, 22, 0, 800, 800, 672, 480, 682, 3000, 682, 3000, 682, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, , , , , ,
+1032, AlizarinPlant, Alizarin Plant, 1, 1, 0, 1, 1, 1, 0, 0, 100, 100, 0, 0, 0, 0, 0, 0, 1, 1, 1, 3, 22, 0, 800, 800, 672, 480, 683, 3000, 683, 3000, 683, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, , , , , ,
+1033, SeaSlime, Sea Slime, 70, 600, 0, 90, 9, 1, 30, 40, 3, 7, 1, 25, 1, 0, 30, 30, 1, 1, 1, 0, 41, 131, 1500, 1872, 672, 480, 535, 800, 657, 800, 518, 500, 510, 1000, 700, 50, 1199, 5000, 568, 100, 541, 50, 0, 0, 0, 0, , , , , ,
+1034, GrassSnake, Grass Snake, 150, 1000, 0, 700, 100, 1, 80, 120, 2, 10, 20, 40, 10, 10, 40, 50, 1, 1, 1, 0, 20, 133, 500, 1100, 672, 480, 716, 400, 716, 400, 712, 500, 676, 1000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, , , , , ,
+1035, Silkworm, Silkworm, 20, 1, 0, 1, 1, 1, 0, 0, 2, 10, 20, 11, 10, 10, 40, 10, 1, 1, 1, 0, 20, 129, 1300, 1100, 672, 480, 718, 5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, , , , , ,
diff --git a/db/skill_db.txt b/db/skill_db.txt
index 71b76e61..721fa755 100644
--- a/db/skill_db.txt
+++ b/db/skill_db.txt
@@ -16,3 +16,9 @@
//NPC Skills
196,0,0,4,0,1,10,1,no,0,2,0,magic,0 //NPC_SUMMONSLAVE
197,0,0,4,0,1,10,1,no,0,2,0,none,0 //NPC_EMOTION
+340,0,0,0,0,0,5,0,no,0,0,0,magic,0 //TMW_MAGIC
+341,0,0,0,0,0,5,0,no,0,0,0,magic,0 //TMW_MAGIC_LIFE
+342,0,0,0,0,0,5,0,no,0,0,0,magic,0 //TMW_MAGIC_WAR
+343,0,0,0,0,0,5,0,no,0,0,0,magic,0 //TMW_MAGIC_TRANSMUTE
+344,0,0,0,0,0,5,0,no,0,0,0,magic,0 //TMW_MAGIC_NATURE
+345,0,0,0,0,0,5,0,no,0,0,0,magic,0 //TMW_MAGIC_ASTRAL
diff --git a/db/statpoint.txt b/db/statpoint.txt
index 1b3f3d89..b61780d4 100644
--- a/db/statpoint.txt
+++ b/db/statpoint.txt
@@ -1,255 +1,255 @@
48
-51
-54
-57
+52
+56
60
64
-68
-72
-76
-80
-85
+69
+74
+79
+84
90
-95
-100
-105
-111
-117
-123
+96
+102
+108
+115
+122
129
-135
-142
-149
-156
-163
-170
-178
+136
+144
+152
+160
+168
+177
186
-194
-202
-210
-219
-228
-237
-246
+195
+204
+214
+224
+234
+244
255
-265
-275
-285
-295
-305
-316
-327
-338
+266
+277
+288
+300
+312
+324
+336
349
-360
-372
-384
-396
-408
-420
-433
-446
+362
+375
+388
+402
+416
+430
+444
459
-472
-485
-499
-513
-527
-541
-555
-570
+474
+489
+504
+520
+536
+552
+568
585
-600
-615
-630
-646
-662
-678
-694
-710
+602
+619
+636
+654
+672
+690
+708
727
-744
-761
-778
-795
-813
-831
-849
-867
+746
+765
+784
+804
+824
+844
+864
885
-904
-923
-942
-961
-980
-1000
-1020
-1040
-1060
-1080
-1101
-1122
-1143
-1164
-1185
-1207
-1229
-1251
-1273
-1295
-1318
-1341
-1364
-1387
-1410
-1434
-1458
+906
+927
+948
+970
+992
+1014
+1036
+1059
+1082
+1105
+1128
+1152
+1176
+1200
+1224
+1249
+1274
+1299
+1324
+1350
+1376
+1402
+1428
+1455
1482
-1506
-1530
-1555
-1580
-1605
-1630
-1655
-1681
-1707
-1733
-1759
-1785
-1812
-1839
-1866
-1893
-1920
-1948
-1976
-2004
-2032
-2060
-2089
-2118
-2147
-2176
-2205
+1509
+1536
+1564
+1592
+1620
+1648
+1677
+1706
+1735
+1764
+1794
+1824
+1854
+1884
+1915
+1946
+1977
+2008
+2040
+2072
+2104
+2136
+2169
+2202
2235
-2265
-2295
-2325
-2355
-2386
-2417
-2448
-2479
-2510
-2542
-2574
-2606
-2638
-2670
-2703
-2736
-2769
-2802
-2835
-2869
-2903
-2937
-2971
-3005
-3040
-3075
-3110
-3145
-3180
-3216
-3252
-3288
-3324
-3360
-3397
-3434
-3471
-3508
-3545
-3583
-3621
-3659
-3697
-3735
-3774
-3813
+2268
+2302
+2336
+2370
+2404
+2439
+2474
+2509
+2544
+2580
+2616
+2652
+2688
+2725
+2762
+2799
+2836
+2874
+2912
+2950
+2988
+3027
+3066
+3105
+3144
+3184
+3224
+3264
+3304
+3345
+3386
+3427
+3468
+3510
+3552
+3594
+3636
+3679
+3722
+3765
+3808
3852
-3891
-3930
-3970
-4010
-4050
-4090
-4130
-4171
-4212
-4253
-4294
-4335
-4377
-4419
-4461
-4503
-4545
-4588
-4631
-4674
-4717
-4760
-4804
-4848
-4892
-4936
-4980
-5025
-5070
-5115
-5160
-5205
-5251
-5297
-5343
-5389
-5435
-5482
-5529
-5576
-5623
-5670
-5718
-5766
-5814
-5862
+3896
+3940
+3984
+4029
+4074
+4119
+4164
+4210
+4256
+4302
+4348
+4395
+4442
+4489
+4536
+4584
+4632
+4680
+4728
+4777
+4826
+4875
+4924
+4974
+5024
+5074
+5124
+5175
+5226
+5277
+5328
+5380
+5432
+5484
+5536
+5589
+5642
+5695
+5748
+5802
+5856
5910
-5959
-6008
-6057
-6106
-6155
-6205
-6255
-6305
-6355
-6405
-6456
-6507
-6558
-6609
-6660
-6712
-6764
-6816
+5964
+6019
+6074
+6129
+6184
+6240
+6296
+6352
+6408
+6465
+6522
+6579
+6636
+6694
+6752
+6810
6868
-6920
-6973
-7026
-7079
-7132
-7185
+6927
+6986
+7045
+7104
+7164
+7224
+7284
+7344
+7405
+7466
+7527
+7588
+7650
+7712
+7774
+7836
+7899
+7962
+8025
+8088
+8152
+8216
+8280
+8344
+8409
+8474
+8539
+8604
+8670
+8736
+8802
+8868
+8935
+9002
diff --git a/eathena-monitor.c b/eathena-monitor.c
index df247ada..3ab7f0f2 100644
--- a/eathena-monitor.c
+++ b/eathena-monitor.c
@@ -126,9 +126,9 @@ void start_process(char *exec) {
}
void stop_process(int sig) {
- system("killall -9 map-server");
- system("killall -9 login-server");
- system("killall -9 char-server");
+ system("killall map-server");
+ system("killall login-server");
+ system("killall char-server");
exit(0);
}
diff --git a/news.txt b/news.txt
new file mode 100644
index 00000000..fc7949a7
--- /dev/null
+++ b/news.txt
@@ -0,0 +1,274 @@
+##3 Mines and weddings!
+##3 2008-10-11
+
+##0 A new mining operation has started north of
+##0 town. The company's director has stated that
+##0 the mine's output has been sufficient and no
+##0 problems have been encountered.
+
+##0 A new wedding officiator has been commissioned.
+##0 She has set up shop west of town. Many couples
+##0 are rejoicing that a new officiator is in the
+##0 region.
+
+##2 ~ Hurnscald Gazette ~
+
+##3 Volcano erupted!
+##3 14/09/2008
+
+##0 A volcano has erupted east of the city, causing
+##0 major damage. Repairs are under way. The guard
+##0 has cautioned that the new beach area that was
+##0 opened up by the rumbling should be explored
+##0 with caution.
+
+##0 In related news, local alchemists have stated
+##0 that the ash from the eruption is what caused
+##0 many items of clothing to be bleached.
+
+##2 ~ Tulimshar Herald ~
+
+##3 Strange stones appeared and pass cleared
+##3 15/04/2008
+
+##0 Strange stones appeared in towns all over The
+##0 Mana World. No one knows how they appeared
+##0 and what they are good for. Can you solve their
+##0 riddle?
+
+##0 In other news: The pass to the southeast of the
+##0 desert has been cleared and a mountain area
+##0 with a lot of snakes has been discovered behind
+##0 it. Rumors say that an eremite lives in that
+##0 area who is a genius at leatherworks.
+
+##2 The Mana World News
+
+##3 Fast attack bug fixed, gameplay changes
+##3 07/04/2008
+
+##0 This weekend a fix was applied for the bug that
+##0 allowed you to attack with light-speed with
+##0 several weapons. We understand this changes
+##0 gameplay quite a bit, and as a result the game
+##0 will probably need to be adjusted. The existence
+##0 of this bug has effectively prevented us from
+##0 ever being able to balance the gameplay
+##0 properly.
+
+##0 Please stay with us and allow us some time to
+##0 make the necessary adjustments. Suggestions are
+##0 welcome!
+
+##2 TMW Development Team
+
+##3 The Mana World 0.0.24 released
+##3 24/12/2007
+
+##0 Female-specific hairstyles, XP gaining
+##0 notification and improved resource caching are
+##0 but three examples of the new features in this
+##0 release. A lot of bug fixes where also made.
+##0 See the full details on the website!
+
+##2 Bjorn Lindeijer
+
+##3 Village of Hurnscald released
+##3 21/08/2007
+
+##0 The village of Hurnscald has been released
+##0 today. You will find this little village in the
+##0 woodland (try to explore paths you found
+##0 blocked before). In Hurnscald you will find two
+##0 new quests, new items and a lot of little
+##0 surprises. Enjoy!
+
+##2 Crush
+
+##3 The Mana World 0.0.23 released
+##3 04/06/2007
+
+##0 A particle engine was added, which allowed us
+##0 to add several nice effects to various locations
+##0 in the world as well as effects based on hitting
+##0 enemies or going level up. A series of bug fixes
+##0 was also made.
+
+##2 Bjorn Lindeijer
+
+##3 The Mana World 0.0.22.2 released
+##3 17/02/2007
+
+##0 Several small fixes have been made and we
+##0 hope to have solved some updater problems.
+##0 Upgrade whenever you're ready.
+
+##2 Bjorn Lindeijer
+
+##3 Soulless characters deleted and money cut
+##3 21/01/2007
+
+##0 A long time ago we have allowed characteres to
+##0 sell their soul in order to gain additional
+##0 powers. They were explicitly warned that they
+##0 would be eventually deleted. This time has now
+##0 come.
+
+##0 In addition, we have cut the fortune of
+##0 anybody who had more than 10.000 GP.
+
+##2 Bjorn Lindeijer
+
+##3 Server address change!
+##3 17/01/2007
+
+##0 The animesites.de host is no longer available.
+##0 We thank Ultramichy for hosting us for so long
+##0 at no cost! The new server address is:
+
+##1 server.themanaworld.org
+
+##0 We are now kindly hosted on platinum, thanks
+##0 to Platyna.
+
+##2 Bjorn Lindeijer
+
+##3 The Mana World 0.0.22.1 released
+##3 15/01/2007
+
+##0 A minor update was released based on the new
+##0 Guichan 0.6.0. Some small fixes are also
+##0 included.
+
+##2 Bjorn Lindeijer
+
+##3 The Mana World 0.0.22 released
+##3 24/12/2006
+
+##0 On the edge of Christmas, we've released a
+##0 new client version. A Christmas event is
+##0 expected to start soon and you'll need the
+##0 new client for it, so go get it! Read the
+##0 NEWS for file details on what's new.
+
+##2 Bjorn Lindeijer
+
+##3 New update host
+##3 31/10/2006
+
+##0 We moved to a new update host, and you have
+##0 succesfully switched! The new host is:
+
+##0 http://updates.themanaworld.org
+
+##0 We hope to provide faster updates from here,
+##0 and we won't have to change it anymore, even
+##0 when switching servers. Enjoy!
+
+##2 Bjorn Lindeijer
+
+##3 Halloween event
+##3 27/10/2006
+
+##0 Halloween event is planned to start on 31/10
+##0 at 10:00 GMT and will end on 1/11 at 10:00
+##0 GMT. Expect a lot of fun and fear!
+##1 "Trick or treat?"
+
+##2 Jack-o'-lantern
+
+##3 The Mana World 0.0.21 released
+##3 18/09/2006
+
+##0 0.0.21 is finally out. Please update to
+##0 the latest version to play.
+
+##0 Regards,
+##2 ElvenProgrammer
+
+##1 Server downtime
+##3 25/07/2006
+
+##0 The server could be down for upgrades to
+##0 support the new features in 0.0.20.
+
+##3 The Mana World 0.0.19 released
+##3 06/03/2006
+
+##0 You did wait for it a lot of time! Enjoy the
+##0 new version with renewed player graphics.
+##0 Other surprises could be awaiting for you in
+##0 game. Upgrade now or die! (Probably killed
+##0 by a maggot).
+
+##0 Regards,
+##2 ElvenProgrammer
+
+##3 The Mana World 0.0.18 released
+##3 (Santa's build) 21/12/2005
+
+##0 Finally it's here! It features a lot of
+##0 new contents as well as a Christmas
+##0 quest. These will not work with any
+##0 client up to 0.0.17, so be sure to
+##0 upgrade! We hope you enjoy it!!
+
+##2 A very merry Christmas from
+##2 The Mana World Development Team
+
+##3 The Mana World 0.0.17 released
+##3 11/10/2005
+
+##0 Be sure to check it out. One problem to
+##0 note though is that you'll need to
+##0 manually delete the files from your
+##0 updates directory in order to see the
+##0 new commands and changes in the help
+##0 window.
+
+##2 Bjorn Lindeijer
+
+##3 Server up again
+##3 5/9/2005
+
+##0 As of today the server on animesites.de
+##0 is back up. Thanks go to UltraMichy for
+##0 providing us this service. Enjoy!
+
+##0 Sincerely,
+##2 Bjorn Lindeijer
+
+##1 Server downtime!
+##3 15/9/2005
+
+##0 The server will be down at least until
+##0 saturday because our kind host is going
+##0 to upgrade some of the software
+##0 installed.
+##0 I'm sorry but you will have to wait a
+##0 while to play again.
+##0 Of course the next event will be delayed
+##0 a bit. In the meanwhile feel free to
+##0 contribute to TMW by posting your ideas
+##0 in the forum.
+
+##0 Sincerely,
+##2 ElvenProgrammer
+
+##3 First dynamic data update!
+##3 12/9/2005
+
+##0 We just released our first dynamic data update.
+##0 It's a very small one, but it serves mostly as
+##0 a test and we hope to do bigger ones later.
+##0 Changes:
+
+##0 * Fixed some small bugs in eastern desert
+##0 map and added minimap.
+##0 * Updated recent changes in help dialog to
+##0 the 0.0.16 release.
+
+##0 Stay tuned for the next one. :-)
+
+##0 Sincerely,
+##2 Bjorn Lindeijer
diff --git a/npc/arena/guards.txt b/npc/arena/guards.txt
deleted file mode 100644
index e757b39f..00000000
--- a/npc/arena/guards.txt
+++ /dev/null
@@ -1,23 +0,0 @@
-new_6-1.gat,77,37,0 script Phaet 125,{
- mes "[Phaet the Royal Guard]";
- mes "Do you want to go back?";
- next;
-
- menu "Yes",-,"No",L_No;
- mes "Ok.";
- next;
-
- warp "new_8-1.gat",25,23;
- close;
-
-L_No:
- mes "Have fun.";
- close;
-}
-
-new_6-1.gat,69,37,0 script Aradin 126,{
- mes "[Aradin the Royal Guard]";
- mes "Don't touch me!";
- mes "You won't find it very funny.";
- close;
-}
diff --git a/npc/arena/monsters.txt b/npc/arena/monsters.txt
deleted file mode 100644
index 6f1751cd..00000000
--- a/npc/arena/monsters.txt
+++ /dev/null
@@ -1 +0,0 @@
-new_6-1.gat,0,0,0,0 monster Maggot 1002,10,0,0,0
diff --git a/npc/cave-big/monsters.txt b/npc/cave-big/monsters.txt
deleted file mode 100644
index c6c80d08..00000000
--- a/npc/cave-big/monsters.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-new_17-1.gat,0,0,0,0 monster Lamp_Snake 1021,40,0,0,0
-new_17-1.gat,0,0,0,0 monster Shroom 1019,15,0,0,0
diff --git a/npc/cave-big/passages.txt b/npc/cave-big/passages.txt
deleted file mode 100644
index b04786e5..00000000
--- a/npc/cave-big/passages.txt
+++ /dev/null
@@ -1 +0,0 @@
-new_17-1.gat,71,10 warp firstlvl 3,0,new_4-1.gat,31,24
diff --git a/npc/cave-small/hermit.txt b/npc/cave-small/hermit.txt
deleted file mode 100644
index 848b2c65..00000000
--- a/npc/cave-small/hermit.txt
+++ /dev/null
@@ -1,14 +0,0 @@
-new_4-1.gat,30,30,0 script Arkim 116,{
- mes "[Arkim the Hermit]";
- mes "Do you want to go back outside?";
- next;
- menu
- "Yes please",yes,
- "Not yet",notyet;
-yes:
- warp "new_9-1.gat",60,95;
- close;
-notyet:
- close;
-
-} \ No newline at end of file
diff --git a/npc/cave-small/monsters.txt b/npc/cave-small/monsters.txt
deleted file mode 100644
index feeb5ea9..00000000
--- a/npc/cave-small/monsters.txt
+++ /dev/null
@@ -1 +0,0 @@
-new_4-1.gat,0,0,0,0 monster Bat 1017,20,0,0,0 \ No newline at end of file
diff --git a/npc/cave1/miners.txt b/npc/cave1/miners.txt
deleted file mode 100644
index d3a17b52..00000000
--- a/npc/cave1/miners.txt
+++ /dev/null
@@ -1,39 +0,0 @@
-new_2-1.gat,35,35,6 script Nathan 109,{
- mes "[Nathan the Miner]";
- mes "It's very dangerous in here";
- mes "Be careful";
- close;
-}
-
-new_5-1.gat,32,94,6 script Naem 109,{
- mes "[Naem the Miner]";
- mes "Do you want me to lift you to the upper level?";
- next;
- menu
- "Sure",sure,
- "Not yet!",notyet;
-
-sure:
- warp "new_2-1.gat",87,99;
- close;
-
-notyet:
- close;
-}
-
-new_2-1.gat,85,97,6 script Naem 109,{
- mes "[Naem the Miner]";
- mes "We discovered an underground palace";
- mes "Do you want me to let you in?";
- next;
- menu
- "Sure",sure,
- "Not yet!",notyet;
-
-sure:
- warp "new_5-1.gat",34,92;
- close;
-
-notyet:
- close;
-}
diff --git a/npc/cave1/monsters.txt b/npc/cave1/monsters.txt
deleted file mode 100644
index 302bfb1b..00000000
--- a/npc/cave1/monsters.txt
+++ /dev/null
@@ -1,26 +0,0 @@
-// Map: new_2-1
-// This is the cave below Tulimshar entrance -- lv1
-//
-// ALWAYS keep a backup file before edit (experience :)
-// The last param is the Event on Mobdeath
-//
-
-new_2-1.gat,0,0,0,0 monster RedSlime 1008,30,2500,0,ConquestMob2::OnRedSlime
-new_2-1.gat,0,0,0,0 monster ScorpionB 1009,15,2500,0,ConquestMob2::OnScorpB
-
-
-new_2-1.gat,0,0,0 script ConquestMob2 -1,{
-// id 1008 = Red Slime
-OnRedSlime:
- if (MPQUEST == 1) set Mobpt,Mobpt+18;
- break;
-
-// id 1009 == Black Scorpion
-OnScorpB:
- if (MPQUEST == 1) set Mobpt,Mobpt+45;
- break;
-end;
-}
-
-
-
diff --git a/npc/cave2/monsters.txt b/npc/cave2/monsters.txt
deleted file mode 100644
index c1d5e28b..00000000
--- a/npc/cave2/monsters.txt
+++ /dev/null
@@ -1,25 +0,0 @@
-// Map: new_5-1
-// This is the cave below Tulimshar second level aka "Underground Palace"
-//
-// ALWAYS keep a backup file before edit (experience :)
-// The last param is the Event on Mobdeath
-//
-
-new_5-1.gat,0,0,0,0 monster Spider 1012,10,2500,0,ConquestMob5::OnSpider
-new_5-1.gat,0,0,0,0 monster SlimeY 1007,25,2500,0,ConquestMob5::OnSlimeY
-
-new_5-1.gat,0,0,0 script ConquestMob5 -1,{
-// id 1012 = Spider
-OnSpider:
- if (MPQUEST == 1) set Mobpt,Mobpt+56;
- break;
-
-// id 1007 == Yellow Slime
-OnSlimeY:
- if (MPQUEST == 1) set Mobpt,Mobpt+9;
- break;
-end;
-}
-
-
-
diff --git a/npc/cave2/passages.txt b/npc/cave2/passages.txt
deleted file mode 100644
index ec363db0..00000000
--- a/npc/cave2/passages.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-new_2-1.gat,36,30 warp caveexit 3,0,new_1-1.gat,25,95
-new_1-1.gat,19,94 warp caveentrance 1,1,new_2-1.gat,37,31
-new_1-1.gat,111,79 warp eastdesert 2,2,new_7-1.gat,23,40
-new_7-1.gat,18,39 warp westdesert 3,4,new_1-1.gat,106,78 \ No newline at end of file
diff --git a/npc/dimonds-cove/doug.txt b/npc/dimonds-cove/doug.txt
deleted file mode 100644
index 241d94c0..00000000
--- a/npc/dimonds-cove/doug.txt
+++ /dev/null
@@ -1,90 +0,0 @@
-new_23-1.gat,68,87,0 script Doug 113,{
- if(CaveSnakeLamp == 1) goto reas;
- if(CaveSnakeLamp == 2) goto done;
- set @TEMP,rand(3);
- if(@TEMP == 1) goto L_1;
- if(@TEMP == 2) goto L_2;
- if(@TEMP == 3) goto L_3;
- if(@TEMP == 0) goto L_4;
-
-L_1:
- mes "[Doug]";
- mes "I need 40 more [Cave Snake Lamps] to make my light!";
- next;
- goto main1;
-L_2:
- mes "[Doug]";
- mes "This lamp should light up this whole place! I just need [40 Cave Snake Lamps]";
- next;
- goto main1;
-L_3:
- mes "[Doug]";
- mes "This is gonna be bright! A must have for anyone! All i need is a few parts...";
- goto main1;
-L_4:
- mes "[Doug]";
- mes "Can you get me 40 [Cave Snake Lamps]? I need them to get this light finished.";
- next;
- goto main1;
-
-main1:
- mes "[Doug]";
- mes "Will you help me find 40 [Cave Snake Lamps]?";
- next;
- menu "Yes",B_1,"No",B_2;
-B_1:
- set CaveSnakeLamp,1;
- set @TEMP,rand(3);
- if(@TEMP == 1) goto J_1;
- if(@TEMP == 2) goto J_2;
- if(@TEMP == 3) goto J_3;
- if(@TEMP == 0) goto J_4;
-J_1:
- mes "[Doug]";
- mes "Thank you!";
- next;
- goto main2;
-J_2:
- mes "[Doug]";
- mes "I don't know how to thank you enough!";
- next;
- goto main2;
-J_3:
- mes "[Doug]";
- mes "I will pay you when you get them!";
- next;
- goto main2;
-J_4:
- mes "[Doug]";
- mes "I'm sure I will give a small reward. :D";
- next;
- goto main2;
-main2:
- mes "[Doug]";
- mes "Now please go get me 40 [Cave Snake Lamps]";
- close;
-reas:
- if(countitem(612) >= 40) goto have;
- mes "[Doug]";
- mes "Please help me collect 40 [Cave Snake Lamps]!";
- close;
-have:
- mes "[Doug]";
- mes "Cool! Now I can make this light!";
- delitem 612,40;
- next;
- mes "[Doug]";
- mes "Here's what I got to give you!";
- next;
- mes "Got 2000 GP";
- set zeny,zeny+2000;
- set CaveSnakeLamp,2;
- close;
-done:
- mes "[Doug]";
- mes "Thanks for your help! Those snakes sure have bright lamps!";
- close;
-B_2:
- close;
-}
-
diff --git a/npc/dimonds-cove/workers.txt b/npc/dimonds-cove/workers.txt
deleted file mode 100644
index 489888e5..00000000
--- a/npc/dimonds-cove/workers.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-new_23-1.gat,23,70,0 script Josh 102,{
- mes "We're working on getting the cellar pass open.";
- close;
-}
-
-new_23-1.gat,39,75,0 script Zack 102,{
- mes "My brother and I are fixing the cellar pass.";
- close;
-}
diff --git a/npc/easter2008/monsters.txt b/npc/easter2008/monsters.txt
index 3379a134..d7b9960f 100644
--- a/npc/easter2008/monsters.txt
+++ b/npc/easter2008/monsters.txt
@@ -1,15 +1,15 @@
-new_1-1.gat,0,0,0,0 monster EasterFluffy 1027,1,0,0,0
-new_2-1.gat,0,0,0,0 monster EasterFluffy 1027,1,0,0,0
-new_3-1.gat,0,0,0,0 monster EasterFluffy 1027,1,0,0,0
-new_5-1.gat,0,0,0,0 monster EasterFluffy 1027,1,0,0,0
-new_7-1.gat,0,0,0,0 monster EasterFluffy 1027,1,0,0,0
-new_9-1.gat,0,0,0,0 monster EasterFluffy 1027,1,0,0,0
-new_10-1.gat,0,0,0,0 monster EasterFluffy 1027,1,0,0,0
-new_12-1.gat,0,0,0,0 monster EasterFluffy 1027,1,0,0,0
-new_14-1.gat,0,0,0,0 monster EasterFluffy 1027,1,0,0,0
-new_15-1.gat,0,0,0,0 monster EasterFluffy 1027,1,0,0,0
-new_16-1.gat,0,0,0,0 monster EasterFluffy 1027,1,0,0,0
-new_17-1.gat,0,0,0,0 monster EasterFluffy 1027,1,0,0,0
-new_18-1.gat,0,0,0,0 monster EasterFluffy 1027,1,0,0,0
-new_19-1.gat,0,0,0,0 monster EasterFluffy 1027,1,0,0,0
+new_1-1.gat,0,0,0,0 monster EasterFluffy 1027,1,0,0,0
+new_2-1.gat,0,0,0,0 monster EasterFluffy 1027,1,0,0,0
+new_3-1.gat,0,0,0,0 monster EasterFluffy 1027,1,0,0,0
+new_5-1.gat,0,0,0,0 monster EasterFluffy 1027,1,0,0,0
+new_7-1.gat,0,0,0,0 monster EasterFluffy 1027,1,0,0,0
+new_9-1.gat,0,0,0,0 monster EasterFluffy 1027,1,0,0,0
+new_10-1.gat,0,0,0,0 monster EasterFluffy 1027,1,0,0,0
+new_12-1.gat,0,0,0,0 monster EasterFluffy 1027,1,0,0,0
+new_14-1.gat,0,0,0,0 monster EasterFluffy 1027,1,0,0,0
+new_15-1.gat,0,0,0,0 monster EasterFluffy 1027,1,0,0,0
+new_16-1.gat,0,0,0,0 monster EasterFluffy 1027,1,0,0,0
+new_17-1.gat,0,0,0,0 monster EasterFluffy 1027,1,0,0,0
+new_18-1.gat,0,0,0,0 monster EasterFluffy 1027,1,0,0,0
+new_19-1.gat,0,0,0,0 monster EasterFluffy 1027,1,0,0,0
new_22-1.gat,0,0,0,0 monster EasterFluffy 1027,1,0,0,0 \ No newline at end of file
diff --git a/npc/eastern-desert-pass/monsters.txt b/npc/eastern-desert-pass/monsters.txt
deleted file mode 100644
index 78afe530..00000000
--- a/npc/eastern-desert-pass/monsters.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-new_24-1.gat,0,0,0,0 monster MountainSnake 1026,60,0,0,0
-new_25-1.gat,0,0,0,0 monster MountainSnake 1026,50,0,0,0
diff --git a/npc/eastern-desert-pass/npcs.txt b/npc/eastern-desert-pass/npcs.txt
deleted file mode 100644
index 3452e124..00000000
--- a/npc/eastern-desert-pass/npcs.txt
+++ /dev/null
@@ -1,136 +0,0 @@
-new_24-1.gat,39,27,0 script Mika 114,{
- mes "[Mika]";
- mes "My father told me about a man living in this desert who makes clothes out of snake skin.";
- next;
- mes "[Mika]";
- mes "Maybe you can find him, but be careful you don't get lost in the tunnels!";
- close;
-}
-
-new_24-1.gat,23,100,0 script Pachua 143,{
- mes "[Chief Pachua]";
- mes "How!";
- next;
-
- mes "[Chief Pachua]";
- mes "For generations my tribe has been crafting special clothes out of different items.";
- next;
-
- if((countitem(610)>0 && countitem(641)>9) && (countitem(524)>0 && countitem(641)>1)) goto L_Super_store;
- if(countitem(610)>0 && countitem(641)>9) goto L_Chaps_store;
- if(countitem(524)>0 && countitem(641)>1) goto L_Cowboy_store;
- goto L_Mysterious;
-
- L_Mysterious:
- mes "[Chief Pachua]";
- mes "Maybe if you bring me the right materials I can make something for you?";
- close;
-
- L_CheckStuff:
- mes "[Chief Pachua]";
- mes "Let me see what you have there.";
- next;
- return;
-
- L_Super_store:
- callsub L_CheckStuff;
- mes "[Chief Pachua]";
- mes "Ahh you have lots of good items to work with.";
- mes "";
- mes "With them I can make you either";
- mes "a Cowboy hat or Snake Skin Chaps";
- next;
- menu "Cowboy hat, please.",L_Cowboy_store2,"Snake Skin Chaps sound good.",L_Chaps_store2,"Not now, maybe later.",L_NoDeal;
-
- L_Cowboy_store:
- callsub L_CheckStuff;
- goto L_Cowboy_store2;
-
- L_Chaps_store:
- callsub L_CheckStuff;
- goto L_Chaps_store2;
-
- L_Cowboy_store2:
- mes "[Chief Pachua]";
- mes "To make you a Cowboy hat I will need:";
- mes "1 Fancy hat";
- mes "2 Snake skins";
- mes "5.000 GP";
- mes "";
- mes "Do we have a deal?";
- next;
- menu "Yes, that's fine.",L_BuyCowboy,"On second thoughts, maybe later.",L_NoDeal;
-
- L_Chaps_store2:
- mes "[Chief Pachua]";
- mes "To make you a pair of Snake Skin Chaps I will need:";
- mes "1 Jeans Shorts";
- mes "10 Snake skins";
- mes "10.000 GP";
- mes "";
- mes "Do we have a deal?";
- next;
- menu "Yes, that's fine.",L_BuyChaps,"On second thoughts, maybe later.",L_NoDeal;
-
- L_BuyChaps:
- if (zeny<10000) goto L_NoMoney;
- if (countitem(610)<1) goto L_NoJeans;
- if (countitem(641)<10) goto L_NoSkin;
- set zeny, zeny-10000;
- delitem 641,10;
- delitem 610,1;
- getitem 642,1;
- goto L_DealDone;
-
- L_BuyCowboy:
- if (zeny<5000) goto L_NoMoney;
- if (countitem(524)<1) goto L_NoFancy;
- if (countitem(641)<2) goto L_NoSkin;
- set zeny, zeny-5000;
- delitem 641,2;
- delitem 524,1;
- set @temp,rand(2);
- if(@temp == 0) goto L_Cowboy_white;
- goto L_Cowboy_black;
-
- L_Cowboy_white:
- getitem 643,1;
- goto L_DealDone;
-
- L_Cowboy_black:
- getitem 644,1;
- goto L_DealDone;
-
- L_DealDone:
- mes "[Chief Pachua]";
- mes "Here you are!";
- mes "";
- mes "Come back any time.";
- close;
-
- L_NoDeal:
- mes "[Chief Pachua]";
- mes "Alright, but you wont get a better deal anywhere else!";
- close;
-
- L_NoMoney:
- mes "[Chief Pachua]";
- mes "Oh dear, it seems you don't have enough money.";
- close;
-
- L_NoJeans:
- mes "[Chief Pachua]";
- mes "Oh dear, it seems you don't have enough jeans shorts.";
- close;
-
- L_NoFancy:
- mes "[Chief Pachua]";
- mes "Oh dear, it seems you don't have enough fancy hats.";
- close;
-
- L_NoSkins:
- mes "[Chief Pachua]";
- mes "Oh dear, it seems you don't have enough snake skins.";
- close;
-
-}
diff --git a/npc/eastern-desert-pass/passages.txt b/npc/eastern-desert-pass/passages.txt
deleted file mode 100644
index 989fc22a..00000000
--- a/npc/eastern-desert-pass/passages.txt
+++ /dev/null
@@ -1,84 +0,0 @@
-new_7-1.gat,162,103 warp toMountainPass 0,0,new_24-1.gat,20,33
-new_7-1.gat,163,102 warp toMountainPass 0,0,new_24-1.gat,21,32
-new_7-1.gat,164,101 warp toMountainPass 0,0,new_24-1.gat,22,31
-new_7-1.gat,165,100 warp toMountainPass 0,0,new_24-1.gat,23,30
-new_7-1.gat,166,99 warp toMountainPass 0,0,new_24-1.gat,24,29
-new_7-1.gat,167,98 warp toMountainPass 0,0,new_24-1.gat,25,28
-new_7-1.gat,168,97 warp toMountainPass 0,0,new_24-1.gat,26,27
-new_7-1.gat,169,96 warp toMountainPass 0,0,new_24-1.gat,27,26
-new_7-1.gat,170,95 warp toMountainPass 0,0,new_24-1.gat,28,25
-new_7-1.gat,171,94 warp toMountainPass 0,0,new_24-1.gat,29,24
-new_7-1.gat,172,93 warp toMountainPass 0,0,new_24-1.gat,30,23
-new_7-1.gat,173,92 warp toMountainPass 0,0,new_24-1.gat,31,22
-new_7-1.gat,174,91 warp toMountainPass 0,0,new_24-1.gat,32,21
-
-new_24-1.gat,19,32 warp toEastDesert 0,0,new_7-1.gat,160,101
-new_24-1.gat,20,31 warp toEastDesert 0,0,new_7-1.gat,161,100
-new_24-1.gat,21,30 warp toEastDesert 0,0,new_7-1.gat,162,99
-new_24-1.gat,22,29 warp toEastDesert 0,0,new_7-1.gat,163,98
-new_24-1.gat,23,28 warp toEastDesert 0,0,new_7-1.gat,164,97
-new_24-1.gat,24,27 warp toEastDesert 0,0,new_7-1.gat,165,96
-new_24-1.gat,25,26 warp toEastDesert 0,0,new_7-1.gat,166,95
-new_24-1.gat,26,25 warp toEastDesert 0,0,new_7-1.gat,167,94
-new_24-1.gat,27,24 warp toEastDesert 0,0,new_7-1.gat,168,93
-new_24-1.gat,28,23 warp toEastDesert 0,0,new_7-1.gat,169,92
-new_24-1.gat,29,22 warp toEastDesert 0,0,new_7-1.gat,170,91
-new_24-1.gat,30,21 warp toEastDesert 0,0,new_7-1.gat,171,90
-new_24-1.gat,31,20 warp toEastDesert 0,0,new_7-1.gat,172,89
-
-new_24-1.gat,40,26 warp toMountainCave 0,0,new_25-1.gat,40,27
-new_25-1.gat,40,26 warp toMountainPass 0,0,new_24-1.gat,40,27
-
-new_24-1.gat,55,27 warp toMountainCave 0,0,new_25-1.gat,55,28
-new_25-1.gat,55,27 warp toMountainPass 0,0,new_24-1.gat,55,28
-
-new_24-1.gat,62,30 warp toMountainCave 0,0,new_25-1.gat,62,31
-new_25-1.gat,62,30 warp toMountainPass 0,0,new_24-1.gat,62,31
-
-new_24-1.gat,86,24 warp toMountainCave 0,0,new_25-1.gat,86,25
-new_25-1.gat,86,24 warp toMountainPass 0,0,new_24-1.gat,86,25
-
-new_24-1.gat,91,24 warp toMountainCave 0,0,new_25-1.gat,91,25
-new_25-1.gat,91,24 warp toMountainPass 0,0,new_24-1.gat,91,25
-
-new_24-1.gat,122,24 warp toMountainCave 0,0,new_25-1.gat,122,25
-new_25-1.gat,122,24 warp toMountainPass 0,0,new_24-1.gat,122,25
-
-new_24-1.gat,77,44 warp toMountainCave 0,0,new_25-1.gat,77,45
-new_25-1.gat,77,44 warp toMountainPass 0,0,new_24-1.gat,77,45
-
-new_24-1.gat,104,44 warp toMountainCave 0,0,new_25-1.gat,104,45
-new_25-1.gat,104,44 warp toMountainPass 0,0,new_24-1.gat,104,45
-
-new_24-1.gat,114,49 warp toMountainCave 0,0,new_25-1.gat,114,50
-new_25-1.gat,114,49 warp toMountainPass 0,0,new_24-1.gat,114,50
-
-new_24-1.gat,110,56 warp toMountainCave 0,0,new_25-1.gat,110,57
-new_25-1.gat,110,56 warp toMountainPass 0,0,new_24-1.gat,110,57
-
-new_24-1.gat,125,59 warp toMountainCave 0,0,new_25-1.gat,125,60
-new_25-1.gat,125,59 warp toMountainPass 0,0,new_24-1.gat,125,60
-
-new_24-1.gat,60,58 warp toMountainCave 0,0,new_25-1.gat,60,69
-new_25-1.gat,60,68 warp toMountainPass 0,0,new_24-1.gat,60,59
-
-new_24-1.gat,92,63 warp toMountainCave 0,0,new_25-1.gat,92,64
-new_25-1.gat,92,63 warp toMountainPass 0,0,new_24-1.gat,92,64
-
-new_24-1.gat,112,74 warp toMountainCave 0,0,new_25-1.gat,112,75
-new_25-1.gat,112,74 warp toMountainPass 0,0,new_24-1.gat,112,75
-
-new_24-1.gat,51,90 warp toMountainCave 0,0,new_25-1.gat,51,91
-new_25-1.gat,51,90 warp toMountainPass 0,0,new_24-1.gat,51,91
-
-new_24-1.gat,74,90 warp toMountainCave 0,0,new_25-1.gat,74,91
-new_25-1.gat,74,90 warp toMountainPass 0,0,new_24-1.gat,74,91
-
-new_24-1.gat,38,121 warp toMountainCave 0,0,new_25-1.gat,38,122
-new_25-1.gat,38,121 warp toMountainPass 0,0,new_24-1.gat,38,122
-
-new_24-1.gat,79,120 warp toMountainCave 0,0,new_25-1.gat,79,121
-new_25-1.gat,79,120 warp toMountainPass 0,0,new_24-1.gat,79,121
-
-new_24-1.gat,121,110 warp toMountainCave 0,0,new_25-1.gat,121,111
-new_25-1.gat,121,110 warp toMountainPass 0,0,new_24-1.gat,121,111
diff --git a/npc/eastern-desert/monsters.txt b/npc/eastern-desert/monsters.txt
deleted file mode 100644
index 0d67ee7e..00000000
--- a/npc/eastern-desert/monsters.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-new_7-1.gat,0,0,0,0 monster Maggot 1002,20,0,0,0
-new_7-1.gat,0,0,0,0 monster Snake 1010,20,0,0,0
-new_22-1.gat,0,0,0,0 monster Snake 1010,200,0,0,0 \ No newline at end of file
diff --git a/npc/eastern-desert/passages.txt b/npc/eastern-desert/passages.txt
deleted file mode 100644
index 582bb635..00000000
--- a/npc/eastern-desert/passages.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-new_2-1.gat,36,30 warp caveexit 3,0,new_1-1.gat,25,95
-new_1-1.gat,19,94 warp caveentrance 1,1,new_2-1.gat,37,31
-new_1-1.gat,111,79 warp eastdesert 2,2,new_7-1.gat,23,40
-new_7-1.gat,18,39 warp westdesert 3,4,new_1-1.gat,106,78
-new_7-1.gat,89,23 warp tosnakecaveN 0,0,new_22-1.gat,52,34
-new_7-1.gat,71,75 warp tosnakecaveS 0,0,new_22-1.gat,33,83
-new_22-1.gat,52,33 warp fromsnakecaveN 0,0,new_7-1.gat,89,24
-new_22-1.gat,33,82 warp fromsnakecaveS 0,0,new_7-1.gat,71,76 \ No newline at end of file
diff --git a/npc/functions/banker.txt b/npc/functions/banker.txt
new file mode 100644
index 00000000..00a85bab
--- /dev/null
+++ b/npc/functions/banker.txt
@@ -0,0 +1,160 @@
+//
+
+function script Banker {
+ mes "[" + @npcName$ + "]";
+ mes "\"Welcome to the bank!";
+ mes "How can I help you?\"";
+ next;
+ menu "Deposit",L_Dep,"Withdraw",L_With,"Check my balance",L_Balance,"Nevermind",L_Nev;
+
+L_Dep:
+ mes "[" + @npcName$ + "]";
+ mes "\"How much would you like to deposit?\"";
+ next;
+ menu
+ "1,000 GP", D_1,
+ "5,000 GP", D_5,
+ "10,000 GP", D_10,
+ "25,000 GP", D_25,
+ "50,000 GP", D_50,
+ "100,000 GP", D_100,
+ "250,000 GP", D_250,
+ "500,000 GP", D_500,
+ "1,000,000 GP", D_1000,
+ "All of my money", D_All,
+ "I've changed my mind", L_Nev;
+
+D_1:
+ if (zeny<1000) goto L_NoMoney;
+ set @Amount, 1000;
+ goto L_Deposit;
+D_5:
+ if (zeny<5000) goto L_NoMoney;
+ set @Amount, 5000;
+ goto L_Deposit;
+D_10:
+ if (zeny<10000) goto L_NoMoney;
+ set @Amount, 10000;
+ goto L_Deposit;
+D_25:
+ if (zeny<25000) goto L_NoMoney;
+ set @Amount, 25000;
+ goto L_Deposit;
+D_50:
+ if (zeny<50000) goto L_NoMoney;
+ set @Amount, 50000;
+ goto L_Deposit;
+D_100:
+ if (zeny<100000) goto L_NoMoney;
+ set @Amount, 100000;
+ goto L_Deposit;
+D_250:
+ if (zeny<250000) goto L_NoMoney;
+ set @Amount, 250000;
+ goto L_Deposit;
+D_500:
+ if (zeny<500000) goto L_NoMoney;
+ set @Amount, 500000;
+ goto L_Deposit;
+D_1000:
+ if (zeny<1000000) goto L_NoMoney;
+ set @Amount, 1000000;
+ goto L_Deposit;
+D_All:
+ if (zeny<1) goto L_NoMoney;
+ set @Amount, zeny;
+ goto L_Deposit;
+
+L_Deposit:
+ set zeny, zeny - @Amount;
+ set BankAccount, BankAccount + @Amount;
+ goto L_Balance;
+
+L_With:
+ mes "[" + @npcName$ + "]";
+ mes "\"How much would you like to withdraw?\"";
+ next;
+ menu
+ "1,000 GP", W_1,
+ "5,000 GP", W_5,
+ "10,000 GP", W_10,
+ "25,000 GP", W_25,
+ "50,000 GP", W_50,
+ "100,000 GP", W_100,
+ "250,000 GP", W_250,
+ "500,000 GP", W_500,
+ "1,000,000 GP", W_1000,
+ "All of my money", W_All,
+ "I've changed my mind", L_Nev;
+
+W_1:
+ if (BankAccount < 1000) goto L_NoMoney;
+ set @Amount, 1000;
+ goto L_Withdraw;
+
+W_5:
+ if (BankAccount < 5000) goto L_NoMoney;
+ set @Amount, 5000;
+ goto L_Withdraw;
+
+W_10:
+ if (BankAccount < 10000) goto L_NoMoney;
+ set @Amount, 10000;
+ goto L_Withdraw;
+
+W_25:
+ if (BankAccount < 25000) goto L_NoMoney;
+ set @Amount, 25000;
+ goto L_Withdraw;
+
+W_50:
+ if (BankAccount < 50000) goto L_NoMoney;
+ set @Amount, 50000;
+ goto L_Withdraw;
+
+W_100:
+ if (BankAccount < 100000) goto L_NoMoney;
+ set @Amount, 100000;
+ goto L_Withdraw;
+
+W_250:
+ if (BankAccount < 250000) goto L_NoMoney;
+ set @Amount, 250000;
+ goto L_Withdraw;
+
+W_500:
+ if (BankAccount < 500000) goto L_NoMoney;
+ set @Amount, 500000;
+ goto L_Withdraw;
+
+W_1000:
+ if (BankAccount < 1000000) goto L_NoMoney;
+ set @Amount, 1000000;
+ goto L_Withdraw;
+
+W_All:
+ if (BankAccount < 1) goto L_NoMoney;
+ set @Amount, BankAccount;
+ goto L_Withdraw;
+
+L_Withdraw:
+ set zeny, zeny + @Amount;
+ set BankAccount, BankAccount - @Amount;
+ goto L_Balance;
+
+L_Balance:
+ mes "[" + @npcName$ + "]";
+ mes "\"Your current bank balance is:";
+ mes BankAccount + " GP\"";
+ return;
+
+L_Nev:
+ mes "[" + @npcName$ + "]";
+ mes "\"Goodbye then.\"";
+ return;
+
+L_NoMoney:
+ mes "[" + @npcName$ + "]";
+ mes "\"Oh dear, it seems that you don't have enough money.\"";
+ return;
+}
diff --git a/npc/functions/barber.txt b/npc/functions/barber.txt
new file mode 100644
index 00000000..0edaab73
--- /dev/null
+++ b/npc/functions/barber.txt
@@ -0,0 +1,66 @@
+//
+
+function script Barber {
+ menu
+ "Change my style", L_Style,
+ "Change my color", L_Color,
+ "Nah, I'm fine", L_Done;
+
+L_Style:
+ if (Sex == 0) goto L_Style_Female;
+
+L_Style_Male:
+ menu
+ "Bald", -,
+ "Ponytail", -,
+ "Bowl cut", -,
+ "Combed back", -,
+ "Emo", -,
+ "Mohawk", -,
+ "Pompadour", -,
+ "Center parting", -,
+ "Supprise me", -,
+ "Nah, I'm fine", close;
+ goto L_Process_Style;
+
+L_Style_Female:
+ menu
+ "Bald", -,
+ "Long and slick", -,
+ "Short and curly", -,
+ "Ponytail", -,
+ "Pigtails", -,
+ "Long and curly", -,
+ "Parted", -,
+ "Short and slick", -,
+ "Supprise me", -,
+ "Nah, I'm fine", L_Done;
+
+L_Process_Style:
+ set @style, @menu - 1;
+ if (@style == 8) set @style, rand(8);
+ setlook 1, @style;
+ return;
+
+L_Color:
+ menu
+ "Brunette", -,
+ "Green", -,
+ "Dark red", -,
+ "Light purple", -,
+ "Gray", -,
+ "Blonde", -,
+ "Teal", -,
+ "Light red", -,
+ "Blue", -,
+ "Dark purple", -,
+ "Supprise me", -,
+ "Nah, I'm fine", L_Done;
+ set @color, @menu - 1;
+ if (@color == 10) set @color, rand(10);
+ setlook 6, @color;
+ return;
+
+L_Done:
+ return;
+}
diff --git a/npc/functions/game_rules.txt b/npc/functions/game_rules.txt
new file mode 100644
index 00000000..5c55a76d
--- /dev/null
+++ b/npc/functions/game_rules.txt
@@ -0,0 +1,108 @@
+//
+
+function script GameRules {
+ menu
+ "English", L_English,
+ "Deutsch (German)", L_German,
+ "Nederlands (Dutch)", L_Dutch,
+ "Dansk (Danish)", L_Danish,
+ "Français (French)", L_French,
+ "Español (Spanish)", L_Spanish,
+ "Português (Portuguese)", L_Portuguese;
+ if (@canSkip) return;
+
+L_English:
+ mes "Players breaking the following rules may be banned (up to and including a permanent ban) or have their characters reset at the GM's discretion:";
+ mes "1. Do not abuse other players (insults, swearing, and the like directed to a particular person or persons)";
+ mes "2. No bots (and botting means ANY activity while away from keyboard)";
+ mes "3. No spamming / flooding (including trade spam)";
+ mes "4. No begging";
+ mes "5. Speak English on public chat";
+ mes "6. Treat others the same way you would like to be treated (RFC 1855)";
+ next;
+ mes "Botting will be determined by talking to players who are moving and/or attacking.";
+ next;
+ goto L_End;
+
+L_German:
+ mes "Wir bitten um das Einhalten der folgenden Regeln:";
+ mes "1. Keine Beleidigungen, Schimpfwoerter, Schmaehungen oder Rufmord";
+ mes "2. Keine `bots' (automatisierte Spieler). Dies beinhaltet JEGLICHE Teilnahme am Spiel waehrend der Abwesenheit des Spielers.";
+ mes "3. Kein `spamming' oder `flooding' (schnelles Wiederholen von Nachrichten oder Aufforderungen zum Warenhandel).";
+ mes "4. Kein Betteln.";
+ mes "5. Englisch ist die einzige zulaessige Sprache im oeffentlichen Raum.";
+ mes "6. Behandelt andere so, wie Ihr behandelt werden wollt. (RFC 1855)";
+ next;
+ mes "Jegliche Regelverstoesse koennen koennen bestraft werden, entweder durch ein Zuruecksetzen der Charaktereigenschaften und -besitztuemer auf den Ausgangszustand, oder durch einen temporaeren oder permanenten Ausschluss aus dem Spiel. ";
+ next;
+ goto L_End;
+
+L_Dutch:
+ mes "Spelers die de volgende regels overtreden lopen het risico gebanned te worden (oplopend tot een permanente ban) of een reset te krijgen:";
+ mes "1. Misbruik geen andere spelers (vloeken, groftaal gebruik, enzovoort tegen een bepaalde persoon of personen)";
+ mes "2. Geen 'bots' (geautomatiseerde speler) en botten betekend ELKE activiteit terwijl je van je toetsenboord weg bent";
+ mes "3. Verboden te 'spammen' (inclusief het spammen van ruilaanvragen)";
+ mes "4. Verboden te bedelen";
+ mes "5. Spreek Engels op de publieke chat";
+ mes "6. Behandel andere zoals ook jij behandeld wilt worden (RFC 1855)";
+ next;
+ mes "Botten word bepaald door te praten tegen spelers die aan het bewegen en/of aanvallen zijn.";
+ next;
+ goto L_End;
+
+L_Danish:
+ mes "Spillere der ikke overholder de følgende regner, bliver måske banned (op til et permanent ban) eller får deres bruger nulstillet af en spiller mester (GM).";
+ mes "1. Misbrug ikke andre spillere (fornærm dem ikke, sværg ikke og mobning er forbudt)";
+ mes "2. Det er forbudt, at bruge bots (Botting betyder at man er aktiv inde i spillet, imens man er væk fra ens keyboard)";
+ mes "3. Det er forbudt, at spamme i chatten eller lave trade spam (spamme betyder at man sender mange beskeder efter hinanden)";
+ mes "4. Det er forbudt, at tigge (for eksempel: Må jeg ikke nok få dit sværd, kom nu, vær nu sød... og så videre)";
+ mes "5. Det er forbudt, at snakke andre sprog end Engelsk i den åbne chat. (Dog er det lovligt henover /Whisper)";
+ mes "6. Husk at gøre mod andre, som du vil have de skal gøre imod dig (opfør dig ordenligt!) (RFC 1855)";
+ next;
+ mes "Botting vil blive fastlagt på grundlag af, at man snakker til andre spillere, der går rundt og/eller der angriber.";
+ next;
+ goto L_End;
+
+L_French:
+ mes "Les joueurs ne respectant pas les regles suivantes pourront, à la discretion des moderateurs (GM), etre bannis (jusqu'au banissement eternel inclus) ou avoir leur personnage reinitialise :";
+ mes "1. Ne manquez pas de respect envers les autres joueurs (insultes, language grossier, et autres choses du meme genre à l'intention d'un(e) joueur(se) en particulier ou d'un groupe de joueurs(ses))";
+ mes "2. N'utilisez pas de \"bot\" (ceci inclus n'importe quelle activite dans le jeu en etant loin du clavier, dont poser un objet sur le clavier pour attaquer automatiquement les monstres)";
+ mes "3. Ne faites pas de publicite inadequate (spam) et de repetitions intempestives (flood) (ceci inclus la repetition de demande de troc (trade))";
+ mes "4. Ne demandez pas d'items ou d'argent (les echanges doivent se faire de preference sur forums.themanaworld.org)";
+ mes "5. Parlez anglais dans les salons de discussions publics (principalement en ville)";
+ mes "6. Traitez les autres de la meme maniere que vous voudriez etre traite(e) (RFC 1855)";
+ next;
+ mes "L'utilisation de \"bot\" sera determinee en parlant aux joueurs(ses) en train de bouger et/ou d'attaquer.";
+ next;
+ goto L_End;
+
+L_Spanish:
+ mes "Reproductores de romper las reglas siguientes pueden ser prohibidas (hasta e incluyendo una prohibición permanente) o restablecer sus personajes en la discreción del Maestro de Juego:";
+ mes "1. No abuse de otros jugadores (insultos, palabrotas, y al igual que la dirigida a una persona en particular o personas)";
+ mes "2. No los robots (y el uso de trampas será entiende cualquier actividad, mientras que fuera de teclado)";
+ mes "3. No envío de spam o de inundaciones (incluyendo el comercio spam)";
+ mes "4. No mendicidad";
+ mes "5. Habla Inglés público en el chat";
+ mes "6. Trata a los demás de la misma manera que te gustaría ser tratado (RFC 1855)";
+ next;
+ mes "El uso de trampas será determinado por hablar con los jugadores que se están moviendo y / o atacar.";
+ next;
+ goto L_End;
+
+L_Portuguese:
+ mes "Jogadores que quebrarem as regras que se seguem serão banidos (temporáriamente ou permanentemente), ou a possibilidade dos caracteres serem limpos à descrição do Mestre do Jogo (GM).";
+ mes "1. Não tratar mal os outros jogadores (isto, insultar, dizer palavrões ou chamar nomes a pessoas em particular, etc.)";
+ mes "2. Proibido \"botting\", que quer dizer qualquer actividade do caracter enquanto o jogador estiver longe do teclado.";
+ mes "3. Não abusar da caixa de texto com mensagens repetitivas, ou abusar da função de trocar com outros jogadores.";
+ mes "4. Pedintes serão ignorados, ou banidos.";
+ mes "5. Fale inglês em lugares publicos.";
+ mes "6. Trate os outros da mesma maneira que quer ser tratado(a). (RFC 1855)";
+ next;
+ mes "O \"botting\" será determinado, falando com os jogadores que se movem e/ou atacam.";
+ next;
+ goto L_End;
+
+L_End:
+ set TUT_var, TUT_var | 1;
+ return;
+}
diff --git a/npc/functions/inn.txt b/npc/functions/inn.txt
new file mode 100644
index 00000000..770f17be
--- /dev/null
+++ b/npc/functions/inn.txt
@@ -0,0 +1,30 @@
+// INN
+
+function script Inn {
+ mes "[" + @npcName$ + "]";
+ mes "\"Would you like to rest? It's only " + @cost + " gp.\"";
+ next;
+
+ menu
+ "Yes", -,
+ "No", L_No;
+
+ if (zeny < @cost) goto L_NoMoney;
+ set zeny, zeny - @cost;
+ heal 10000, 10000;
+
+ mes "[" + @npcName$ + "]";
+ mes "\"Sleep well!\"";
+ next;
+ close;
+
+L_No:
+ mes "[" + @npcName$ + "]";
+ mes "\"See you.\"";
+ close;
+
+L_NoMoney:
+ mes "[" + @npcName$ + "]";
+ mes "\"You don't have enough money to stay here.\"";
+ close;
+}
diff --git a/npc/functions/mob_points.txt b/npc/functions/mob_points.txt
new file mode 100644
index 00000000..9e8dad92
--- /dev/null
+++ b/npc/functions/mob_points.txt
@@ -0,0 +1,42 @@
+// Mob points
+
+function script MobPoints {
+ if (@mobID < 1002) return;
+
+ setarray @points,
+ 1, // Maggot
+ 2, // Scorpion
+ 20, // Red Scorpion
+ 10, // Green Slime
+ 30, // Giant Maggot
+ 15, // Yellow Slime
+ 25, // Red Slime
+ 45, // Black Scorpion
+ 50, // Snake
+ 4, // Fire Goblin
+ 55, // Spider
+ 23, // Evil Mushroom
+ 35, // Flower
+ 40, // Santa Slime
+ 15, // Rudolph Slime
+ 2, // Bat
+ 16, // Pinkie
+ 17, // Shroom
+ 14, // Fluffy
+ 25, // Cave Snake
+ 100, // Jack-O
+ 80, // Fire Skull
+ 80, // Poison Skull
+ 20, // Stumpy
+ 70, // Mountain Snake
+ 15, // Easter Fluffy
+ 40, // Mouboo
+ 0, // Mauve Plant
+ 0, // Gamboge Plant
+ 0, // Cobalt Plant
+ 0, // Alizarin Plant
+ 20, // Sea Slime
+ 0; // Silk Worm
+
+ if (MPQUEST == 1) set Mobpt, Mobpt + @points[@mobID - 1002];
+}
diff --git a/npc/functions/process_equip.txt b/npc/functions/process_equip.txt
new file mode 100644
index 00000000..6a56dcbc
--- /dev/null
+++ b/npc/functions/process_equip.txt
@@ -0,0 +1,27 @@
+//
+
+function script ProcessEquip {
+ set @head, getequipid(equip_head);
+ set @torso, getequipid(equip_torso);
+ set @legs, getequipid(equip_legs);
+
+ set @torsoB, @torso;
+ if (@torsoB >= 2050 && @torsoB <= 2059) set @torsoB, 1202; // Cotton shirt
+ if (@torsoB >= 2060 && @torsoB <= 2069) set @torsoB, 624; // V Neck
+ if (@torsoB >= 2070 && @torsoB <= 2079) set @torsoB, 564; // T Neck
+ if (@torsoB >= 2080 && @torsoB <= 2089) set @torsoB, 720; // Silk Robe
+ if (@torsoB >= 2090 && @torsoB <= 2099) set @torsoB, 688; // Tanktop
+ if (@torsoB >= 2120 && @torsoB <= 2129) set @torsoB, 689; // Short tanktop
+ set @torsoC, cNone;
+ if (@torso == 1202 || @torso == 624 || @torso == 564 || @torso == 688 || @torso == 689 || @torso == 720) set @torsoC, cWhite;
+ if (@torso >= 2050) set @torsoC, @torso % 10;
+
+ set @legsB, @legs;
+ if (@legsB >= 2100 && @legsB <= 2109) set @legsB, 632; // Cotton skirt
+ if (@legsB >= 2110 && @legsB <= 2119) set @legsB, 586; // Cotton shorts
+ set @legsC, cNone;
+ if (@legs == 632 || @legs == 586) set @legsC, cWhite;
+ if (@legs >= 2050) set @legsC, @legs % 10;
+
+ return;
+}
diff --git a/npc/functions/slot_machine.txt b/npc/functions/slot_machine.txt
new file mode 100644
index 00000000..024a2e8a
--- /dev/null
+++ b/npc/functions/slot_machine.txt
@@ -0,0 +1,35 @@
+//
+
+function script SlotMachine {
+ mes "Pull the lever...";
+ next;
+ menu
+ "Pull", L_Play,
+ "Maybe later", -;
+ close;
+
+L_Play:
+ if(countitem(503) < 1) goto L_NoCoin;
+ delitem 503, 1;
+ set @Temp1,rand(7);
+ set @Temp2,rand(7);
+ set @Temp3,rand(7);
+ mes "Numbers: " + @Temp1 + "/" + @Temp2 + "/" + @Temp3 + ".";
+ next;
+
+ if(@Temp1 != @Temp2) goto L_Lost;
+ if(@Temp2 != @Temp3) goto L_Lost;
+ if(@Temp1 != @Temp3) goto L_Lost;
+ mes "Congratulations! You won!";
+ mes "You get 10 casino coins";
+ getitem 503, 10;
+ close;
+
+L_Lost:
+ mes "You lost!";
+ close;
+
+L_NoCoin:
+ mes "Insert coin";
+ close;
+}
diff --git a/npc/functions/soul_menhir.txt b/npc/functions/soul_menhir.txt
new file mode 100644
index 00000000..b51dc593
--- /dev/null
+++ b/npc/functions/soul_menhir.txt
@@ -0,0 +1,34 @@
+function script SoulMenhir {
+ mes "[Soul Menhir]";
+ mes "(A mystical aura surrounds this stone. You feel mysteriously attracted to it. Something tells you to touch it. What do you do?)";
+ next;
+
+ menu
+ "Touch it", -,
+ "Leave it alone", return;
+
+ if (Menhir_Activated == 1) goto L_Shortversion;
+
+ mes "[Soul Menhir]";
+ mes "(You touch the mysteriouse stone. Somehow it feels warm and cold at the same time.)";
+ next;
+
+ mes "[Soul Menhir]";
+ mes "(Suddenly a strange sensation flows through you. It feels like your soul leaves your body and becomes one with the stone.)";
+ next;
+
+ mes "[Soul Menhir]";
+ mes "(As suddenly as the feeling started it stops. The strange attraction is away from one moment to the next and the menhir feels like just an ordinary stone.)";
+ next;
+
+ set Menhir_Activated, 1;
+ goto L_Save;
+
+L_Shortversion:
+ mes "[Soul Menhir]";
+ mes "(A strange sensation flows through you. It feels like your soul leaves your body and becomes one with the stone. as suddenly as the feeling started it stops.)";
+ next;
+
+L_Save:
+ savepoint @map$, @x, @y;
+}
diff --git a/npc/halloween/halloween1.txt b/npc/halloween/2006/halloween1.txt
index 8af51b63..8af51b63 100644
--- a/npc/halloween/halloween1.txt
+++ b/npc/halloween/2006/halloween1.txt
diff --git a/npc/halloween/halloween10.txt b/npc/halloween/2006/halloween10.txt
index 702c320e..702c320e 100644
--- a/npc/halloween/halloween10.txt
+++ b/npc/halloween/2006/halloween10.txt
diff --git a/npc/halloween/halloween11.txt b/npc/halloween/2006/halloween11.txt
index 4d7804c5..4d7804c5 100644
--- a/npc/halloween/halloween11.txt
+++ b/npc/halloween/2006/halloween11.txt
diff --git a/npc/halloween/halloween12.txt b/npc/halloween/2006/halloween12.txt
index 9ca3db5c..9ca3db5c 100644
--- a/npc/halloween/halloween12.txt
+++ b/npc/halloween/2006/halloween12.txt
diff --git a/npc/halloween/halloween13.txt b/npc/halloween/2006/halloween13.txt
index 7b9e46fa..7b9e46fa 100644
--- a/npc/halloween/halloween13.txt
+++ b/npc/halloween/2006/halloween13.txt
diff --git a/npc/halloween/halloween14.txt b/npc/halloween/2006/halloween14.txt
index 16a6a3fa..16a6a3fa 100644
--- a/npc/halloween/halloween14.txt
+++ b/npc/halloween/2006/halloween14.txt
diff --git a/npc/halloween/halloween15.txt b/npc/halloween/2006/halloween15.txt
index 04987efb..04987efb 100644
--- a/npc/halloween/halloween15.txt
+++ b/npc/halloween/2006/halloween15.txt
diff --git a/npc/halloween/halloween16.txt b/npc/halloween/2006/halloween16.txt
index dfc6ea46..dfc6ea46 100644
--- a/npc/halloween/halloween16.txt
+++ b/npc/halloween/2006/halloween16.txt
diff --git a/npc/halloween/halloween17.txt b/npc/halloween/2006/halloween17.txt
index c815854b..c815854b 100644
--- a/npc/halloween/halloween17.txt
+++ b/npc/halloween/2006/halloween17.txt
diff --git a/npc/halloween/halloween18.txt b/npc/halloween/2006/halloween18.txt
index 117dc247..117dc247 100644
--- a/npc/halloween/halloween18.txt
+++ b/npc/halloween/2006/halloween18.txt
diff --git a/npc/halloween/halloween19.txt b/npc/halloween/2006/halloween19.txt
index f5cd2c50..f5cd2c50 100644
--- a/npc/halloween/halloween19.txt
+++ b/npc/halloween/2006/halloween19.txt
diff --git a/npc/halloween/halloween2.txt b/npc/halloween/2006/halloween2.txt
index c2bed367..c2bed367 100644
--- a/npc/halloween/halloween2.txt
+++ b/npc/halloween/2006/halloween2.txt
diff --git a/npc/halloween/halloween20.txt b/npc/halloween/2006/halloween20.txt
index e4ec7b71..e4ec7b71 100644
--- a/npc/halloween/halloween20.txt
+++ b/npc/halloween/2006/halloween20.txt
diff --git a/npc/halloween/halloween3.txt b/npc/halloween/2006/halloween3.txt
index b19562fa..b19562fa 100644
--- a/npc/halloween/halloween3.txt
+++ b/npc/halloween/2006/halloween3.txt
diff --git a/npc/halloween/halloween4.txt b/npc/halloween/2006/halloween4.txt
index 738aff0e..738aff0e 100644
--- a/npc/halloween/halloween4.txt
+++ b/npc/halloween/2006/halloween4.txt
diff --git a/npc/halloween/halloween5.txt b/npc/halloween/2006/halloween5.txt
index df64d075..df64d075 100644
--- a/npc/halloween/halloween5.txt
+++ b/npc/halloween/2006/halloween5.txt
diff --git a/npc/halloween/halloween6.txt b/npc/halloween/2006/halloween6.txt
index 964feb34..964feb34 100644
--- a/npc/halloween/halloween6.txt
+++ b/npc/halloween/2006/halloween6.txt
diff --git a/npc/halloween/halloween7.txt b/npc/halloween/2006/halloween7.txt
index f33a1aee..f33a1aee 100644
--- a/npc/halloween/halloween7.txt
+++ b/npc/halloween/2006/halloween7.txt
diff --git a/npc/halloween/halloween8.txt b/npc/halloween/2006/halloween8.txt
index 679de9ee..679de9ee 100644
--- a/npc/halloween/halloween8.txt
+++ b/npc/halloween/2006/halloween8.txt
diff --git a/npc/halloween/halloween9.txt b/npc/halloween/2006/halloween9.txt
index 8e575bd7..8e575bd7 100644
--- a/npc/halloween/halloween9.txt
+++ b/npc/halloween/2006/halloween9.txt
diff --git a/npc/halloween/monsters.txt b/npc/halloween/2006/monsters.txt
index 91f432d1..91f432d1 100644
--- a/npc/halloween/monsters.txt
+++ b/npc/halloween/2006/monsters.txt
diff --git a/npc/halloween/2008/monsters.txt b/npc/halloween/2008/monsters.txt
new file mode 100644
index 00000000..6237b02e
--- /dev/null
+++ b/npc/halloween/2008/monsters.txt
@@ -0,0 +1,137 @@
+//
+
+new_4-1.gat,0,0,0,0 monster JackO 1022,1,3600000,1800000,Mob4H
+
+new_4-1.gat,0,0,0 script Mob4H -1,{
+ set @mobID, 1022;
+ callfunc "MobPoints";
+ break;
+}
+
+new_6-1.gat,0,0,0,0 monster JackO 1022,5,180000,170000,Mob6H
+
+new_6-1.gat,0,0,0 script Mob6H -1,{
+ set @mobID, 1022;
+ callfunc "MobPoints";
+ break;
+}
+
+new_8-1.gat,132,25,0,0 monster JackO 1022,1,3600000,1800000,Mob8H
+
+new_8-1.gat,0,0,0 script Mob8H -1,{
+ set @mobID, 1022;
+ callfunc "MobPoints";
+ break;
+}
+
+new_13-1.gat,77,64,20,10 monster JackO 1022,1,3600000,1800000,Mob13H
+
+new_13-1.gat,0,0,0 script Mob13H -1,{
+ set @mobID, 1022;
+ callfunc "MobPoints";
+ break;
+}
+
+new_15-1.gat,0,0,0,0 monster JackO 1022,1,3600000,1800000,Mob15H
+
+new_15-1.gat,0,0,0 script Mob15H -1,{
+ set @mobID, 1022;
+ callfunc "MobPoints";
+ break;
+}
+
+new_17-1.gat,76,79,6,1 monster JackO 1022,1,3600000,1800000,Mob17H
+
+new_17-1.gat,0,0,0 script Mob17H -1,{
+ set @mobID, 1022;
+ callfunc "MobPoints";
+ break;
+}
+
+new_20-1.gat,113,47,24,6 monster JackO 1022,1,3600000,1800000,Mob20H
+
+new_20-1.gat,0,0,0 script Mob20H -1,{
+ set @mobID, 1022;
+ callfunc "MobPoints";
+ break;
+}
+
+new_21-1.gat,0,0,0,0 monster JackO 1022,1,3600000,1800000,Mob21H
+
+new_21-1.gat,0,0,0 script Mob21H -1,{
+ set @mobID, 1022;
+ callfunc "MobPoints";
+ break;
+}
+
+new_22-1.gat,86,34,0,0 monster JackO 1022,2,1800000,900000,Mob22H
+
+new_22-1.gat,0,0,0 script Mob22H -1,{
+ set @mobID, 1022;
+ callfunc "MobPoints";
+ break;
+}
+
+new_23-1.gat,26,88,0,0 monster JackO 1022,1,3600000,1800000,Mob23H
+
+new_23-1.gat,0,0,0 script Mob23H -1,{
+ set @mobID, 1022;
+ callfunc "MobPoints";
+ break;
+}
+
+new_24-1.gat,115,121,0,0 monster JackO 1022,1,3600000,1800000,Mob24H
+
+new_24-1.gat,0,0,0 script Mob24H -1,{
+ set @mobID, 1022;
+ callfunc "MobPoints";
+ break;
+}
+
+new_25-1.gat,30,125,0,0 monster JackO 1022,1,3600000,1800000,Mob25H
+
+new_25-1.gat,0,0,0 script Mob25H -1,{
+ set @mobID, 1022;
+ callfunc "MobPoints";
+ break;
+}
+
+new_26-1.gat,19,54,0,0 monster JackO 1022,1,3600000,1800000,Mob26H
+
+new_26-1.gat,0,0,0 script Mob26H -1,{
+ set @mobID, 1022;
+ callfunc "MobPoints";
+ break;
+}
+
+new_27-1.gat,54,130,0,0 monster JackO 1022,1,3600000,1800000,Mob27H
+
+new_27-1.gat,0,0,0 script Mob27H -1,{
+ set @mobID, 1022;
+ callfunc "MobPoints";
+ break;
+}
+
+new_34-1.gat,68,20,0,0 monster JackO 1022,1,3600000,1800000,Mob34H
+
+new_34-1.gat,0,0,0 script Mob34H -1,{
+ set @mobID, 1022;
+ callfunc "MobPoints";
+ break;
+}
+
+new_35-1.gat,26,103,0,0 monster JackO 1022,1,3600000,1800000,Mob35H
+
+new_35-1.gat,0,0,0 script Mob35H -1,{
+ set @mobID, 1022;
+ callfunc "MobPoints";
+ break;
+}
+
+new_38-1.gat,121,46,0,0 monster JackO 1022,1,3600000,1800000,Mob38H
+
+new_38-1.gat,0,0,0 script Mob38H -1,{
+ set @mobID, 1022;
+ callfunc "MobPoints";
+ break;
+}
diff --git a/npc/halloween/2008/prize_master.txt b/npc/halloween/2008/prize_master.txt
new file mode 100644
index 00000000..0e621abf
--- /dev/null
+++ b/npc/halloween/2008/prize_master.txt
@@ -0,0 +1,455 @@
+//
+
+new_23-1.gat,43,32,0 script Prize Master 150,{
+ if (Halloween08 == 65535) goto L_Finished;
+
+ if (Halloween08 == 0) callsub S_Explain;
+
+ // Get detailed info about equipment
+ callfunc "ProcessEquip";
+
+ if (@head == 647) goto L_DevControl;
+ if (@head == 615) goto L_Pumpkin;
+ if (@head == 616) goto L_Axe;
+ if (@head == 617) goto L_Pirate;
+ if (@head == 621) goto L_Eyepatch;
+ if (@head == 622) goto L_Bandana;
+ if (@head == 634) goto L_FaceMask;
+ if (@head == 675) goto L_GradCap;
+ if (@head == 678) goto L_NohMask;
+ if (@head == 679) goto L_DemonMask;
+ if (@head == 656) goto L_SerfHat;
+ if (@head == 1214) goto L_Bunny;
+ if (@head == 643) goto L_WCowboy;
+ if (@head == 644) goto L_BCowboy;
+ if (@head == 1204) goto L_Antler;
+
+ if (Halloween08 & 1) goto L_Random_Done;
+ mes "[Prize Master]";
+ mes "A lovely costume, here is your candy.";
+ set Halloween08, Halloween08 | 1;
+ set @temp, rand(5) + 1;
+ getitem 510, @temp;
+ close;
+
+L_Random_Done:
+ mes "[Prize Master]";
+ mes "\"I don't like that one.\"";
+ close;
+
+
+
+
+
+L_Pumpkin:
+ if (Halloween08 & 2) goto L_Pumpkin_Done;
+ if (@torso != 720) goto L_Pumpkin_Bad;
+ set Halloween08, Halloween08 | 2;
+ set @temp, pow(1080, BaseLevel) * 100;
+ getexp @temp, 0;
+ mes "[" + @temp + " experience points]";
+ close;
+
+L_Pumpkin_Bad:
+ mes "[Prize Master]";
+ mes "\"You aren't convincing me. That doesn't look like a Jack O at all.\"";
+ close;
+
+L_Pumpkin_Done:
+ mes "[Prize Master]";
+ mes "\"I think I've seen this Jack O before.\"";
+ close;
+
+
+
+
+
+L_Axe:
+ if (Halloween08 & 4) goto L_Axe_Done;
+ mes "[Prize Master]";
+ mes "\"You look like you need some help!\"";
+ set Halloween08, Halloween08 | 4;
+ getitem 686, 1;
+ close;
+
+L_Axe_Done:
+ mes "[Prize Master]";
+ mes "\"You've pulled the axe on me already.\"";
+ close;
+
+
+
+
+
+L_Pirate:
+ if (Halloween08 & 8) goto L_Pirate_Done;
+ if (@torso != 2060) goto L_Pirate_BadTorso;
+ if (Sex == 0 && !(@legsB == 632 || @legsB == 586)) goto L_Pirate_BadLegs_Female;
+ if (Sex == 1 && !(@legsB == 610 || @legsB == 586)) goto L_Pirate_BadLegs_Male;
+ mes "[Prize Master]";
+ mes "\"A lovely pirate, but ye be missing this.\"";
+ set Halloween08, Halloween08 | 8;
+ getitem 1215, 1;
+ close;
+
+L_Pirate_BadTorso:
+ if (@torsoC != cRed) goto L_Pirate_BadColor;
+ mes "[Prize Master]";
+ mes "\"That shirt won't work.\"";
+ close;
+
+L_Pirate_BadColor:
+ mes "[Prize Master]";
+ mes "\"Not quite what I'm looking for. Do you remember the story of the brave pirate captain who always wore a certain color before battle?\"";
+ close;
+
+L_Pirate_BadLegs_Male:
+ mes "[Prize Master]";
+ if (@legsB == 632) mes "\"A skirt on a man? Not for the captain!\"";
+ if (@legsB != 632) mes "\"Those pants don't convince me.\"";
+ close;
+
+L_Pirate_BadLegs_Female:
+ mes "[Prize Master]";
+ if (@legsB == 610) mes "\"Jeans don't befit a woman captain.\"";
+ if (@legsB != 632) mes "\"Those pants don't convince me.\"";
+ close;
+
+L_Pirate_Done:
+ mes "[Prize Master]";
+ mes "\"Yarr, ye look familiar.\"";
+ close;
+
+
+
+
+L_Eyepatch:
+ if (Halloween08 & 16) goto L_Pirate_Done;
+ if (@torso != 2060) goto L_Pirate_BadTorso;
+ if (Sex == 0 && !(@legsB == 632 || @legsB == 586)) goto L_Pirate_BadLegs_Female;
+ if (Sex == 1 && !(@legsB == 610 || @legsB == 586)) goto L_Pirate_BadLegs_Male;
+ mes "[Prize Master]";
+ mes "\"Maybe you can use this to replace your eye.\"";
+ set Halloween08, Halloween08 | 16;
+ set @temp, rand(2) + 1;
+ getitem 700, @temp;
+ close;
+
+
+
+
+L_Bandana:
+ if (Halloween08 & 32) goto L_Pirate_Done;
+ if (@torsoC != cWhite) goto L_Bandana_Bad;
+ mes "[Prize Master]";
+ mes "\"Here's a clue for you.\"";
+ set Halloween08, Halloween08 | 32;
+ set @temp, rand(10) + 551;
+ getitem @temp, 1;
+ close;
+
+L_Bandana_Bad:
+ mes "[Prize Master]";
+ mes "\"That shirt doesn't befit a pirate swabie.\"";
+ close;
+
+
+
+
+L_FaceMask:
+ if (Halloween08 & 64) goto L_FaceMask_Done;
+ if (!(@torso == 2081 || @torso == 2089) && ((@torsoC != cGreen && @torsoC != cDarkGreen) || (@legsC != cGreen && @legsC != cDarkGreen))) goto L_FaceMask_Bad;
+ mes "[Prize Master]";
+ mes "\"A lovely swamp thing.\"";
+ set Halloween08, Halloween08 | 64;
+ set @temp, rand(5) + 1;
+ getitem 569, @temp;
+ close;
+
+L_FaceMask_Bad:
+ mes "[Prize Master]";
+ mes "\"That mask makes me think of green. Try again.\"";
+ close;
+
+L_FaceMask_Done:
+ mes "[Prize Master]";
+ mes "\"Another swamp thing? Next.\"";
+ close;
+
+
+
+
+L_GradCap:
+ if (Halloween08 & 128) goto L_GradCap_Done;
+ if (@torso != 2086) goto L_GradCap_Bad;
+ mes "[Prize Master]";
+ mes "\"Here, professor, maybe you can figure this out.\"";
+ set Halloween08, Halloween08 | 128;
+ getitem 585, 1;
+ close;
+
+L_GradCap_Bad:
+ mes "[Prize Master]";
+ mes "\"That doesn't work at all.\"";
+ close;
+
+L_GradCap_Done:
+ mes "[Prize Master]";
+ mes "\"Sorry, professor, but I've already seen you.\"";
+ close;
+
+
+
+
+
+L_NohMask:
+ if (Halloween08 & 256) goto L_NohMask_Done;
+ if (@torsoC != cBlack || @legsC != cBlack) goto L_NohMask_Bad;
+ mes "[Prize Master]";
+ mes "\"Ah, a thief. Just take these.\"";
+ set Halloween08, Halloween08 | 256;
+ set @temp, rand(10) + 1;
+ getitem 503, @temp;
+ close;
+
+L_NohMask_Bad:
+ mes "[Prize Master]";
+ mes "\"That's rather bright for a thief.\"";
+ close;
+
+L_NohMask_Done:
+ mes "[Prize Master]";
+ mes "\"I've caught you trying to get another prize for the same mask.\"";
+ close;
+
+
+
+
+
+L_DemonMask:
+ if (Halloween08 & 512) goto L_DemonMask_Done;
+ if (@torsoC != cRed || @legsC != cRed) goto L_DemonMask_Bad;
+ mes "[Prize Master]";
+ mes "\"I hope this reminds you of home.\"";
+ set Halloween08, Halloween08 | 512;
+ set @temp, rand(3) + 1;
+ getitem 701, @temp;
+ close;
+
+L_DemonMask_Bad:
+ mes "[Prize Master]";
+ mes "\"That just clashes.\"";
+ close;
+
+L_DemonMask_Done:
+ mes "[Prize Master]";
+ mes "\"A bit too many ghouls, don't you think?\"";
+ close;
+
+
+
+
+L_SerfHat:
+ if (Halloween08 & 1024) goto L_SerfHat_Done;
+ if (@torsoB != 1202) goto L_SerfHat_BadTorso;
+ if (@legsB != 586 && @legsB != 632) goto L_SerfHat_BadLegs;
+ mes "[Prize Master]";
+ mes "It doesn't look like you can even afford a costume. Have this anyways.";
+ set Halloween08, Halloween08 | 1024;
+ getitem 657, 1;
+ close;
+
+L_SerfHat_BadTorso:
+ mes "[Prize Master]";
+ mes "\"Your shirt is too fancy for that hat.\"";
+ close;
+
+L_SerfHat_BadLegs:
+ mes "[Prize Master]";
+ mes "\"Your pants are too fancy for that hat.\"";
+ close;
+
+L_SerfHat_Done:
+ mes "[Prize Master]";
+ mes "\"You've got your prize. Maybe you can sell it to get a better costume.\"";
+ close;
+
+
+
+
+L_Bunny:
+ if (Halloween08 & 6144 == 6144) goto L_Bunny_Done;
+ if (@torsoC == cBlack && @legsC == cBlack) goto L_Bunny_Black;
+ if (@torsoC == cWhite && @legsC == cWhite) goto L_Bunny_White;
+ mes "[Prize Master]";
+ mes "\"That doesn't look very much like a bunny to be.\"";
+ close;
+
+L_Bunny_Done:
+ mes "[Prize Master]";
+ mes "\"I've seen enough bunnies from you.\"";
+ close;
+
+L_Bunny_Black:
+ if (Halloween08 & 2048) goto L_Bunny_Black_Done;
+ mes "[Prize Master]";
+ mes "\"A prize for the lovely bunny.\"";
+ set Halloween08, Halloween08 | 2048;
+ getitem 1211, 1;
+ getitem 1212, 1;
+ getitem 1213, 1;
+ close;
+
+L_Bunny_Black_Done:
+ mes "[Prize Master]";
+ mes "\"Another one?\"";
+ close;
+
+L_Bunny_White:
+ if (Halloween08 & 4096) goto L_Bunny_White_Done;
+ mes "[Prize Master]";
+ mes "\"I think you missed some eggs.\"";
+ set Halloween08, Halloween08 | 4096;
+ getitem 1208, 1;
+ getitem 1209, 1;
+ getitem 1210, 1;
+ close;
+
+L_Bunny_White_Done:
+ mes "[Prize Master]";
+ mes "\"Another one?\""; // TODO
+ close;
+
+
+
+
+L_WCowboy:
+ if (Halloween08 & 8192) goto L_Cowboy_Done;
+ if (@torsoC != cWhite) goto L_WCowboy_BadTorso;
+ if (@legs != 642) goto L_Cowboy_BadLegs;
+ mes "[Prize Master]";
+ mes "\"This should help out on the trail.\"";
+ set Halloween08, Halloween08 | 8192;
+ getitem 562, 1;
+ close;
+
+L_WCowboy_BadTorso:
+ mes "[Prize Master]";
+ mes "\"That shirt isn't quite a white at that hat.\"";
+ close;
+
+L_Cowboy_BadLegs:
+ mes "[Prize Master]";
+ if (@legsB == 632) mes "\"How can you stand to ride a horse in that skirt?\"";
+ if (@legsB != 632) mes "\"How can you stand to ride a horse in those pants?\"";
+ close;
+
+L_Cowboy_Done:
+ mes "[Prize Master]";
+ mes "\"I've already seen you, partner. Move along.\"";
+ close;
+
+
+
+
+L_BCowboy:
+ if (Halloween08 & 16384) goto L_Cowboy_Done;
+ if (@torsoC != cBlack) goto L_BCowboy_BadTorso;
+ if (@legs != 642) goto L_Cowboy_BadLegs;
+ mes "[Prize Master]";
+ mes "\"These will help out on the trail.\"";
+ set Halloween08, Halloween08 | 16384;
+ getitem 533, 3;
+ close;
+
+L_BCowboy_BadTorso:
+ mes "[Prize Master]";
+ mes "\"Fashion doesn't seem to be your forte. Try to match that hat better.\"";
+ close;
+
+
+
+
+
+L_Antler:
+ if (Halloween08 & 32768) goto L_Antler_Done;
+ if (@torso != -1 && @legs != -1) goto L_Antler_Bad;
+ mes "[Prize Master]";
+ mes "\"You're a brave deer. Have an apple.\"";
+ set Halloween08, Halloween08 | 32768;
+ set @temp, rand(50) + 1;
+ getitem 535, @temp;
+ close;
+
+L_Antler_Bad:
+ mes "[Prize Master]";
+ mes "\"Antlers AND clothing? I don't think so.\"";
+ close;
+
+L_Antler_Done:
+ mes "[Prize Master]";
+ mes "\"This buck looks familiar.\"";
+ close;
+
+
+
+
+L_Finished:
+ mes "[Prize Master]";
+ mes "\"It seems you've received your 16 prizes.\"";
+ close;
+
+L_DevControl:
+ menu
+ "Announce Open", L_Dev_Announce_Open,
+ "Announce Remind", L_Dev_Announce_Remind,
+ "Announce Close", L_Dev_Announce_Close,
+ "Spawn Jack O", L_Dev_Spawn_JackO,
+ "Spawn Jack O 2", L_Dev_Spawn_JackO_2,
+ "Spawn Jack O in Tulimshar", L_Dev_Spawn_JackO_Tulimshar,
+ "Spawn Jack O in Hurnscald", L_Dev_Spawn_JackO_Hurnscald,
+ "Spawn Skulls", L_Dev_Spawn_Skulls;
+ close;
+
+L_Dev_Announce_Open:
+ announce "A costume party has started at Dimond's Cove. Everyone is invited!", 0;
+ close;
+
+L_Dev_Announce_Remind:
+ announce "The costume party at Dimond's Cove is still going. Please stop by for prizes!", 0;
+ close;
+
+L_Dev_Announce_Close:
+ announce "The costume party Dimond's Cove will be ending soon. Thank you for participating!", 0;
+ close;
+
+L_Dev_Spawn_JackO:
+ monster "this", 34, 34, "Jack O", 1022, 1;
+ close;
+
+L_Dev_Spawn_JackO_2:
+ monster "this", 38, 41, "Jack O", 1022, 1;
+ close;
+
+L_Dev_Spawn_JackO_Tulimshar:
+ monster "new_3-1.gat", 44, 70, "Jack O", 1022, 1;
+ announce "A ghost in Tulimshar!", 0;
+ close;
+
+L_Dev_Spawn_JackO_Hurnscald:
+ monster "new_19-1.gat", 52, 40, "Jack O", 1022, 1;
+ announce "A ghost in Hurnscald!", 0;
+ close;
+
+L_Dev_Spawn_Skulls:
+ monster "this", 32, 39, "Fire Skull", 1023, 1;
+ monster "this", 36, 39, "Poison Skull", 1024, 1;
+ close;
+
+S_Explain:
+ mes "[Prize Master]";
+ mes "\"We're holding a costume party to celebrate Halloween. Each accepted costume gets a prize. Each participant is allowed up to 16 prizes.\"";
+ next;
+
+ return;
+}
diff --git a/npc/ice-cave/monsters.txt b/npc/ice-cave/monsters.txt
deleted file mode 100644
index f46ecd65..00000000
--- a/npc/ice-cave/monsters.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-new_12-1.gat,0,0,0,0 monster Bat 1017,20,0,0,0
-new_12-1.gat,0,0,0,0 monster Violet 1018,10,0,0,0
-
-new_21-1.gat,0,0,0,0 monster Bat 1017,5,0,0,0
-new_21-1.gat,0,0,0,0 monster Fluffy 1020,15,0,0,0 \ No newline at end of file
diff --git a/npc/new_1-1-western-desert/dark_mage.txt b/npc/new_1-1-western-desert/dark_mage.txt
new file mode 100644
index 00000000..1bf8df8c
--- /dev/null
+++ b/npc/new_1-1-western-desert/dark_mage.txt
@@ -0,0 +1,46 @@
+new_1-1.gat,24,24,0 script SoulThief 103,{
+
+ if (class == 1) goto L_Soul;
+ mes "[Dark Mage]";
+ mes "\"Psss hey would you like to have more power?\"";
+ next;
+
+ menu
+ "You fool, that's not possible", -,
+ "I'm listening...", L_Go;
+ close;
+
+L_Go:
+ mes "[Dark Mage]";
+ mes "\"I can give you ancient powers that will let you become the greatest warrior in The Mana World, or the best merchant.";
+ mes "But everything has got his price...\"";
+ next;
+
+ mes "[Dark Mage]";
+ mes "\"Oh nothing important nor expensive.";
+ mes "Just your soul!\"";
+ next;
+
+ menu
+ "My soul? Here it is", L_Soul,
+ "I need a better explanation!", -;
+
+ mes "[Dark Mage]";
+ mes "Well there's a very small possibility that your player will be translated into the new server.";
+ mes "I said a very, very small possibility.";
+ mes "Players without a soul instead will be lost forever...";
+ mes "Come on, you won't loose that much!\"";
+ next;
+
+ menu
+ "Hmmm ok, I guess you can take it.", L_Soul,
+ "Maybe I'll think about it a bit more", -;
+ mes "\"I know you'll come here again when you'll get killed by a maggot, begging me to help you\"";
+ close;
+
+L_Soul:
+ mes "[Dark Mage]";
+ mes "\"Hrhrhr, your soul is finally mine!\"";
+ jobchange 1;
+ close;
+} \ No newline at end of file
diff --git a/npc/western-desert/merchant.txt b/npc/new_1-1-western-desert/merchant.txt
index 6ed55ed4..d01a9164 100644
--- a/npc/western-desert/merchant.txt
+++ b/npc/new_1-1-western-desert/merchant.txt
@@ -1 +1 @@
-new_1-1.gat,19,99,0 shop Ishyah 109,525:800,531:3000,530:8000,1199:3
+new_1-1.gat,19,99,0 shop Ishyah 109,525:800,531:3000,530:8000,1199:3,603:-1
diff --git a/npc/new_1-1-western-desert/monsters.txt b/npc/new_1-1-western-desert/monsters.txt
new file mode 100644
index 00000000..a98c8406
--- /dev/null
+++ b/npc/new_1-1-western-desert/monsters.txt
@@ -0,0 +1,24 @@
+// Map: new_1-1
+// This is the Desert (Sandstorm) south of Tulimshar.
+//
+
+new_1-1.gat,0,0,0,0 monster GreenSlime 1005,50,0,0,Mob1::OnGreenSlime
+new_1-1.gat,0,0,0,0 monster GiantMaggot 1006,30,0,0,Mob1::OnGiantMaggot
+new_1-1.gat,0,0,0,0 monster RedScorpion 1004,20,0,0,Mob1::OnRedScorpion
+
+new_1-1.gat,0,0,0 script Mob1 -1,{
+OnGreenSlime:
+ set @mobID, 1005;
+ callfunc "MobPoints";
+ break;
+
+OnGiantMaggot:
+ set @mobID, 1006;
+ callfunc "MobPoints";
+ break;
+
+OnRedScorpion:
+ set @mobID, 1004;
+ callfunc "MobPoints";
+ break;
+}
diff --git a/npc/western-desert/nomads.txt b/npc/new_1-1-western-desert/nomads.txt
index fbcab292..13edea35 100644
--- a/npc/western-desert/nomads.txt
+++ b/npc/new_1-1-western-desert/nomads.txt
@@ -1,14 +1,14 @@
new_1-1.gat,15,67,0 script Samuel 132,{
mes "[Samuel the Nomad]";
- mes "This is really a nice place.";
+ mes "\"This is really a nice place.\"";
- mes "Don't you think so?";
+ mes "Don't you think so?\"";
close;
}
new_1-1.gat,18,68,0 script Elijah 128,{
mes "[Elijah the Nomad]";
- mes "If I only had a tent...";
+ mes "\"If I only had a tent...\"";
close;
}
diff --git a/npc/new_1-1-western-desert/passages.txt b/npc/new_1-1-western-desert/passages.txt
new file mode 100644
index 00000000..61212ec0
--- /dev/null
+++ b/npc/new_1-1-western-desert/passages.txt
@@ -0,0 +1,5 @@
+new_1-1.gat,19,94 warp caveentrance 1,1,new_2-1.gat,37,31
+new_1-1.gat,111,79 warp eastdesert 2,2,new_7-1.gat,23,40
+new_1-1.gat,11,66 warp tobeach 1,2,new_15-1.gat,168,76
+new_1-1.gat,56,12 warp totown 5,1,new_3-1.gat,44,80
+new_1-1.gat,27,12 warp tobeach 3,1,new_34-1.gat,84,111
diff --git a/npc/new_1-1-western-desert/rogue.txt b/npc/new_1-1-western-desert/rogue.txt
new file mode 100644
index 00000000..87ec45fa
--- /dev/null
+++ b/npc/new_1-1-western-desert/rogue.txt
@@ -0,0 +1,84 @@
+new_1-1.gat,22,21,0 script Malivox 103,{
+
+// if (ResetA_charstate == 1) goto L_Multiple;
+
+// set @cost, 10000000 / ($ResetA_uses + 1);
+
+ set @cost, baselevel * 100;
+
+ mes "[Rogue Mage]";
+ mes "\"I have come across a spell that will";
+ mes "reset your status points.";
+ mes "Normally this spell is expensive, but";
+ mes "due to an unusual constellation of the";
+ mes "stars I can cast it very cheaply!";
+ mes "For you it will cost only "+@cost+" gp.\"";
+ next;
+
+ menu "Reset my stats",-,"Forget about it",L_Pass;
+
+ if (zeny<@cost) goto L_NoMoney;
+
+// set $ResetA_uses, $ResetA_uses + 1;
+// set ResetA_charstate, 1;
+
+L_Reset:
+
+ set zeny, zeny-@cost;
+
+ resetstatus;
+
+ // even though statusup2 takes a number, it does not
+ // decrease chars statspoint, hence the repeating.
+
+ statusup bStr;
+ statusup bStr;
+ statusup bStr;
+ statusup bStr;
+
+ statusup bvit;
+ statusup bvit;
+ statusup bvit;
+ statusup bvit;
+
+ statusup bInt;
+ statusup bInt;
+ statusup bInt;
+ statusup bInt;
+
+ statusup bAgi;
+ statusup bAgi;
+ statusup bAgi;
+ statusup bAgi;
+
+ statusup bDex;
+ statusup bDex;
+ statusup bDex;
+ statusup bDex;
+
+ statusup bLuk;
+ statusup bLuk;
+ statusup bLuk;
+ statusup bLuk;
+
+ mes "[Rogue Mage]";
+ mes "\"There you are.";
+ mes "";
+ mes "Good as new!\"";
+ next;
+ close;
+
+L_Pass:
+ mes "[Rogue Mage]";
+ mes "\"Very well then, see you.\"";
+ next;
+ close;
+
+L_NoMoney:
+ mes "[Rogue Mage]";
+ mes "\"Oh dear, the price cannot be bargained.";
+ mes "";
+ mes "Perhaps you can borrow from a friend?\"";
+ next;
+ close;
+}
diff --git a/npc/new_10-1-xmas/monsters.txt b/npc/new_10-1-xmas/monsters.txt
new file mode 100644
index 00000000..b4515cf2
--- /dev/null
+++ b/npc/new_10-1-xmas/monsters.txt
@@ -0,0 +1,20 @@
+// Map: new_10-1
+// This is the Snow Fields.
+//
+
+new_10-1.gat,0,0,0,0 monster SantaSlime 1015,10,0,0,Mob10::OnSantaSlime
+new_10-1.gat,0,0,0,0 monster RudolphSlime 1016,25,0,0,Mob10::OnRudolphSlime
+
+new_10-1.gat,0,0,0 script Mob10 -1,{
+OnSantaSlime:
+ set @mobID, 1015;
+ callfunc "MobPoints";
+ break;
+
+OnRudolphSlime:
+ set @mobID, 1016;
+ callfunc "MobPoints";
+ break;
+
+ end;
+}
diff --git a/npc/xmas/passages.txt b/npc/new_10-1-xmas/passages.txt
index 6a879b95..6a879b95 100644
--- a/npc/xmas/passages.txt
+++ b/npc/new_10-1-xmas/passages.txt
diff --git a/npc/xmas/santa.txt b/npc/new_10-1-xmas/santa.txt
index c53ce55f..c53ce55f 100644
--- a/npc/xmas/santa.txt
+++ b/npc/new_10-1-xmas/santa.txt
diff --git a/npc/new_10-1-xmas/snowman.txt b/npc/new_10-1-xmas/snowman.txt
new file mode 100644
index 00000000..1e5ba412
--- /dev/null
+++ b/npc/new_10-1-xmas/snowman.txt
@@ -0,0 +1,52 @@
+new_10-1.gat,77,44,0 script Snowman 129,{
+ if( ChristmasQuest == 1) goto L_Done;
+
+ mes "[Snowman]";
+ mes "\"Hello there young man.";
+ mes "Would you like a Christmas hat?\"";
+ next;
+
+L_Menu:
+ menu
+ "Yes", L_Sure,
+ "No", -,
+ "What do you need?", L_Need;
+ mes "[Snowman]";
+ mes "\"Well, thats too bad, but make sure to have the holiday spirit!\"";
+ close;
+
+L_Sure:
+ mes "[Snowman]";
+ mes "\"Hmm, let me see what you have.\"";
+ next;
+ if(countitem(510) < 15) goto L_NoItem;
+ if(countitem(509) < 10) goto L_NoItem;
+ if(countitem(502) < 5) goto L_NoItem;
+ delitem 510, 15;
+ delitem 509, 10;
+ delitem 502, 5;
+ mes "\"Here you go, enjoy your new hat!\"";
+ getitem 511, 1;
+ set ChristmasQuest, 1;
+ close;
+
+L_Need:
+ mes "[Snowman]";
+ mes "\"For this special hat, I need a pint of magic and a little help.";
+ mes "Just kidding. I would like to get some food:";
+ mes "15 Candies";
+ mes "10 Chocolate bars";
+ mes "5 Cactus potions\"";
+ next;
+ goto L_Menu;
+
+L_NoItem:
+ mes "[Snowman]";
+ mes "\"Well, I am interested in some food and you don't have enought to get a hat.\"";
+ close;
+
+L_Done:
+ mes "[Snowman]";
+ mes "\"Thank you for help!\"";
+ close;
+}
diff --git a/npc/new_10-1-xmas/taro.txt b/npc/new_10-1-xmas/taro.txt
new file mode 100644
index 00000000..c5ab3289
--- /dev/null
+++ b/npc/new_10-1-xmas/taro.txt
@@ -0,0 +1,73 @@
+// Snow Taro
+
+new_10-1.gat,57,61,0 script Taro 114,{
+ if (getequipid(equip_head) == 511 || getequipid(equip_head) == 1206) goto L_Santa;
+ if (getequipid(equip_head) == 633) goto L_Elf;
+ if (getequipid(equip_head) == 628) goto L_NearElf;
+ if (getequipid(equip_head) == 1204) goto L_Antlers;
+ if (getequipid(equip_head) == 1205) goto L_Tree;
+
+ mes "[Taro]";
+ mes "\"I'm scared!!!";
+ mes "Take me back, pleeeease!!!\"";
+ next;
+ menu
+ "Ok", L_Warp,
+ "Just give me one more minute.", close;
+ close;
+
+L_Santa:
+ mes "[Taro]";
+ mes "\"SANTA! Will you take me back home?\"";
+ next;
+
+ menu
+ "Of course!", L_Warp,
+ "No, I need to finish some stuff up here.", -;
+ close;
+
+L_Elf:
+ mes "[Taro]";
+ mes "\"Aren't you one of Santa's elves? Can you help me back home?\"";
+ next;
+
+ menu
+ "Yes", L_Warp,
+ "No. I'm too busy.", -;
+ close;
+
+L_NearElf:
+ mes "[Taro]";
+ mes "\"Aren't you one of Santa's elves? Oh, you're not. Will you help me get home anyways?\"";
+ next;
+
+ menu
+ "Yes", L_Warp,
+ "No", -;
+ close;
+
+L_Antlers:
+ mes "[Taro]";
+ mes "\"Mister reindeer? Will you take me home?\"";
+ next;
+
+ menu
+ "Yes", L_Warp,
+ "No", -;
+ close;
+
+L_Tree:
+ mes "[Taro]";
+ mes "\"Oh Christmas tree, I wish I could go home now!\"";
+ next;
+
+ menu
+ "Let me take you", L_Warp,
+ "Sorry, I'm not a magic tree", -;
+ close;
+
+L_Warp:
+ warp "new_29-1.gat", 52, 45;
+ close;
+}
+
diff --git a/npc/xmas/xmas1.txt b/npc/new_10-1-xmas/xmas1.txt
index 814dd9cc..814dd9cc 100644
--- a/npc/xmas/xmas1.txt
+++ b/npc/new_10-1-xmas/xmas1.txt
diff --git a/npc/xmas/xmas10.txt b/npc/new_10-1-xmas/xmas10.txt
index 8ba50ae0..8ba50ae0 100644
--- a/npc/xmas/xmas10.txt
+++ b/npc/new_10-1-xmas/xmas10.txt
diff --git a/npc/xmas/xmas11.txt b/npc/new_10-1-xmas/xmas11.txt
index 212a5225..212a5225 100644
--- a/npc/xmas/xmas11.txt
+++ b/npc/new_10-1-xmas/xmas11.txt
diff --git a/npc/xmas/xmas12.txt b/npc/new_10-1-xmas/xmas12.txt
index a8527eaf..a8527eaf 100644
--- a/npc/xmas/xmas12.txt
+++ b/npc/new_10-1-xmas/xmas12.txt
diff --git a/npc/xmas/xmas13.txt b/npc/new_10-1-xmas/xmas13.txt
index 534403da..534403da 100644
--- a/npc/xmas/xmas13.txt
+++ b/npc/new_10-1-xmas/xmas13.txt
diff --git a/npc/xmas/xmas14.txt b/npc/new_10-1-xmas/xmas14.txt
index 2f1269a4..2f1269a4 100644
--- a/npc/xmas/xmas14.txt
+++ b/npc/new_10-1-xmas/xmas14.txt
diff --git a/npc/xmas/xmas15.txt b/npc/new_10-1-xmas/xmas15.txt
index 32dc490c..32dc490c 100644
--- a/npc/xmas/xmas15.txt
+++ b/npc/new_10-1-xmas/xmas15.txt
diff --git a/npc/xmas/xmas16.txt b/npc/new_10-1-xmas/xmas16.txt
index c072684b..c072684b 100644
--- a/npc/xmas/xmas16.txt
+++ b/npc/new_10-1-xmas/xmas16.txt
diff --git a/npc/xmas/xmas17.txt b/npc/new_10-1-xmas/xmas17.txt
index 292744ef..292744ef 100644
--- a/npc/xmas/xmas17.txt
+++ b/npc/new_10-1-xmas/xmas17.txt
diff --git a/npc/xmas/xmas18.txt b/npc/new_10-1-xmas/xmas18.txt
index e78e1b0c..e78e1b0c 100644
--- a/npc/xmas/xmas18.txt
+++ b/npc/new_10-1-xmas/xmas18.txt
diff --git a/npc/xmas/xmas19.txt b/npc/new_10-1-xmas/xmas19.txt
index 3c60aab7..3c60aab7 100644
--- a/npc/xmas/xmas19.txt
+++ b/npc/new_10-1-xmas/xmas19.txt
diff --git a/npc/xmas/xmas2.txt b/npc/new_10-1-xmas/xmas2.txt
index bba2b0c8..bba2b0c8 100644
--- a/npc/xmas/xmas2.txt
+++ b/npc/new_10-1-xmas/xmas2.txt
diff --git a/npc/xmas/xmas20.txt b/npc/new_10-1-xmas/xmas20.txt
index 0bc045db..0bc045db 100644
--- a/npc/xmas/xmas20.txt
+++ b/npc/new_10-1-xmas/xmas20.txt
diff --git a/npc/xmas/xmas3.txt b/npc/new_10-1-xmas/xmas3.txt
index 28dbc605..28dbc605 100644
--- a/npc/xmas/xmas3.txt
+++ b/npc/new_10-1-xmas/xmas3.txt
diff --git a/npc/xmas/xmas4.txt b/npc/new_10-1-xmas/xmas4.txt
index c9f13e3e..c9f13e3e 100644
--- a/npc/xmas/xmas4.txt
+++ b/npc/new_10-1-xmas/xmas4.txt
diff --git a/npc/xmas/xmas5.txt b/npc/new_10-1-xmas/xmas5.txt
index 7269717c..7269717c 100644
--- a/npc/xmas/xmas5.txt
+++ b/npc/new_10-1-xmas/xmas5.txt
diff --git a/npc/xmas/xmas6.txt b/npc/new_10-1-xmas/xmas6.txt
index da47ca1f..da47ca1f 100644
--- a/npc/xmas/xmas6.txt
+++ b/npc/new_10-1-xmas/xmas6.txt
diff --git a/npc/xmas/xmas7.txt b/npc/new_10-1-xmas/xmas7.txt
index 7bcc2983..7bcc2983 100644
--- a/npc/xmas/xmas7.txt
+++ b/npc/new_10-1-xmas/xmas7.txt
diff --git a/npc/xmas/xmas8.txt b/npc/new_10-1-xmas/xmas8.txt
index 47752239..47752239 100644
--- a/npc/xmas/xmas8.txt
+++ b/npc/new_10-1-xmas/xmas8.txt
diff --git a/npc/xmas/xmas9.txt b/npc/new_10-1-xmas/xmas9.txt
index f27629d8..f27629d8 100644
--- a/npc/xmas/xmas9.txt
+++ b/npc/new_10-1-xmas/xmas9.txt
diff --git a/npc/new_11-1-snow-village/amrak.txt b/npc/new_11-1-snow-village/amrak.txt
new file mode 100644
index 00000000..3717685f
--- /dev/null
+++ b/npc/new_11-1-snow-village/amrak.txt
@@ -0,0 +1,17 @@
+//
+
+new_11-1.gat,66,90,0 script Amrak 103, {
+ mes "[Amrak]";
+ mes "\"This... stone...";
+ mes "I have never seen a mineral like this";
+ mes "before.";
+ mes "And some strange... aura... seems to";
+ mes "emit from it.\"";
+ next;
+ mes "[Amrak]";
+ mes "\"Where did it come from?";
+ mes "How did it got here?";
+ mes "What's its purpose?";
+ mes "I will solve its riddle for sure.\"";
+ close;
+}
diff --git a/npc/new_11-1-snow-village/monsters.txt b/npc/new_11-1-snow-village/monsters.txt
new file mode 100644
index 00000000..92c95f81
--- /dev/null
+++ b/npc/new_11-1-snow-village/monsters.txt
@@ -0,0 +1,14 @@
+// Map: new_11-1
+// This is Snow Town.
+//
+
+new_11-1.gat,56,63,1,1 monster Maggot 1002,2,0,0,Mob11::OnMaggot
+
+new_11-1.gat,0,0,0 script Mob11 -1,{
+OnMaggot:
+ set @mobID, 1002;
+ callfunc "MobPoints";
+ break;
+
+ end;
+}
diff --git a/npc/snow-village/passages.txt b/npc/new_11-1-snow-village/passages.txt
index cb5f9b32..b42939ec 100644
--- a/npc/snow-village/passages.txt
+++ b/npc/new_11-1-snow-village/passages.txt
@@ -1,17 +1,6 @@
new_11-1.gat,76,38 warp tocave 0,0,new_12-1.gat,31,28
new_11-1.gat,69,128 warp tomap 3,0,new_10-1.gat,69,21
-// Clothes shop -> outside
-new_13-1.gat,25,36 warp outside1 0,0,new_11-1.gat,47,50
-// Potions shop -> outside
-new_13-1.gat,64,25 warp outside2 1,1,new_11-1.gat,55,90
-// INN -> outside
-new_13-1.gat,111,33 warp outside3 0,0,new_11-1.gat,64,84
-// Weapons shop -> outside
-new_13-1.gat,32,74 warp outside4 0,0,new_11-1.gat,86,48
-// House -> outside
-new_13-1.gat,72,71 warp outside5 0,0,new_11-1.gat,66,54
-
// outside -> Clothes shop
new_11-1.gat,47,49 warp inside1 0,0,new_13-1.gat,25,33
// outside -> Potions shop
diff --git a/npc/new_11-1-snow-village/sexchanger.txt b/npc/new_11-1-snow-village/sexchanger.txt
new file mode 100644
index 00000000..b26f9e14
--- /dev/null
+++ b/npc/new_11-1-snow-village/sexchanger.txt
@@ -0,0 +1,27 @@
+new_11-1.gat,50,49,0 script Xanith 136,{
+ mes "[Xanith the Surgeon]";
+ mes "\"No sex changes right now, sorry.\"";
+ close;
+
+ mes "[Xanith the Surgeon]";
+ mes "\"Are you tired of being what you are?\"";
+ next;
+
+ mes "[Xanith the Surgeon]";
+ mes "\"Would you maybe be interested in a sex change?\"";
+ next;
+
+ mes "[Server]";
+ mes "\"Warning: All the character in your account will get the sex changed.\"";
+ mes "\"Also you probably will require to restart the client to notice a change.\"";
+ next;
+
+ menu
+ "Please do, my dear...", L_Change,
+ "Leave alone my family treasure!", -;
+ close;
+
+L_Change:
+// changesex;
+ close;
+}
diff --git a/npc/new_11-1-snow-village/soul-menhir.txt b/npc/new_11-1-snow-village/soul-menhir.txt
new file mode 100644
index 00000000..e88a70cd
--- /dev/null
+++ b/npc/new_11-1-snow-village/soul-menhir.txt
@@ -0,0 +1,6 @@
+new_11-1.gat,64,89,0 script Soul Menhir 144, {
+ set @map$, "new_11-1.gat";
+ set @x, 64;
+ set @y, 90;
+ callfunc "SoulMenhir";
+}
diff --git a/npc/new_11-1-snow-village/startrek.txt b/npc/new_11-1-snow-village/startrek.txt
new file mode 100644
index 00000000..72afe5e3
--- /dev/null
+++ b/npc/new_11-1-snow-village/startrek.txt
@@ -0,0 +1,18 @@
+new_11-1.gat,79,77,0 script Kirk 133,{
+ mes "[Capt. Kirk]";
+ mes "\"Spock: We're breaking the prime directive.";
+ mes "This is not the right way to have the first contact.\"";
+ close;
+}
+
+new_11-1.gat,81,77,0 script Spock 134,{
+ mes "[Spock]";
+ mes "\"Live long and prosper captain.\"";
+ next;
+
+ mes "[Spock]";
+ mes "\"trr...Spock to Scotty...";
+ mes "Beam me to the elves village...";
+ mes "I will hide there.\"";
+ close;
+}
diff --git a/npc/new_12-1-ice-cave/monsters.txt b/npc/new_12-1-ice-cave/monsters.txt
new file mode 100644
index 00000000..2cce49b2
--- /dev/null
+++ b/npc/new_12-1-ice-cave/monsters.txt
@@ -0,0 +1,20 @@
+// Map: new_12-1
+// This is the Ice Cave below Snow Town.
+//
+
+new_12-1.gat,0,0,0,0 monster Bat 1017,20,0,0,Mob12::OnBat
+new_12-1.gat,0,0,0,0 monster Pinkie 1018,10,0,0,Mob12::OnPinkie
+
+new_12-1.gat,0,0,0 script Mob12 -1,{
+OnBat:
+ set @mobID, 1017;
+ callfunc "MobPoints";
+ break;
+
+OnPinkie:
+ set @mobID, 1018;
+ callfunc "MobPoints";
+ break;
+
+ end;
+}
diff --git a/npc/ice-cave/passages.txt b/npc/new_12-1-ice-cave/passages.txt
index 6aa808e8..efcea31c 100644
--- a/npc/ice-cave/passages.txt
+++ b/npc/new_12-1-ice-cave/passages.txt
@@ -1,4 +1,2 @@
new_12-1.gat,31,25 warp totown 2,1,new_11-1.gat,76,36
new_12-1.gat,26,23 warp toice2 1,0,new_21-1.gat,37,36
-
-new_21-1.gat,36,34 warp toice1 1,0,new_12-1.gat,26,25
diff --git a/npc/new_13-1-snow-village-shops/furquest.txt b/npc/new_13-1-snow-village-shops/furquest.txt
new file mode 100644
index 00000000..dadb4c76
--- /dev/null
+++ b/npc/new_13-1-snow-village-shops/furquest.txt
@@ -0,0 +1,329 @@
+//#################################################################################
+// Script by Shaili and QOAL
+//#################################################################################
+
+// Santa's Inn - Agostine, The Legendary Tailor
+new_13-1.gat,102,28,0 script Agostine 137, {
+ if (QUEST_WG_state == 1) goto L_State_0_3;
+ if (QUEST_WG_state == 2) goto L_State_1;
+ if (QUEST_WG_state == 3) goto L_State_2;
+ if (QUEST_WG_state == 4) goto L_State_4;
+ if (QUEST_WG_state == 5) goto L_State_4_success;
+ if (QUEST_WG_state == 6) goto L_State_6;
+ if (QUEST_WG_state == 7) goto L_State_11;
+ if (QUEST_WG_state == 8) goto L_State_12;
+ if (QUEST_WG_state >= 9) goto L_State_13;
+
+ mes "\"This goes up, this goes left...\"";
+ next;
+ mes "\"Mmmm...?\"";
+ next;
+ mes "[Agostine, The Legendary Tailor]";
+ mes "\"Oh, a customer! Let me introduce myself! My name is Agostine!";
+ mes "Some people say that I am the best tailor in the world,";
+ mes "but I think I am the best one in the universe!";
+ mes "So, What can I do for you, my friend?\"";
+ next;
+ menu
+ "I want something new for my wardrobe!", L_State_0_1,
+ "Oh, nothing, thanks!", -;
+ close;
+
+// Quest #0 - Beginning - Needed: Iron Potion
+
+L_State_0_1:
+ mes "[Agostine, The Legendary Tailor]";
+ mes "\"Well.. you know... working so hard makes me so tired!";
+ mes "Can you bring me something tasty to drink, my friend?\"";
+ next;
+ menu
+ "Sure, what kind of drink you like?", L_State_0_2,
+ "I'm not your waiter!", -;
+ close;
+
+L_State_0_2:
+ mes "[Agostine, The Legendary Tailor]";
+ mes "\"Here we do not have a bar. Let me taste different beverages.";
+ mes "I want something new to drink.\"";
+ next;
+ menu
+ "I'll bring you different drinks to try!", L_State_Accept,
+ "Maybe a bar will open soon, wait for it.", -;
+ close;
+
+L_State_Accept:
+ mes "[Agostine, The Legendary Tailor]";
+ mes "\"Thanks so much.\"";
+ set QUEST_WG_state, 1;
+ close;
+
+L_State_0_3:
+ mes "[Agostine, The Legendary Tailor]";
+ mes "\"Well, what have you brought me?\"";
+ next;
+ menu
+ "A Cactus Drink.", L_State_0_4,
+ "A Cactus Potion.", L_State_0_5,
+ "Some milk.", L_State_0_6,
+ "A pint of beer.", L_State_0_7,
+ "A Iron potion.", L_State_0_9,
+ "A Concentration Potion.", L_State_0_8,
+ "Nothing, at the moment.", -;
+ close;
+
+L_State_0_4:
+ mes "[Agostine, The Legendary Tailor]";
+ mes "\"So, a Cactus Drink?\"";
+ if (countitem(501) < 1) goto L_State_neg;
+ next;
+ delitem 501, 1;
+ goto L_State_bad;
+ close;
+
+L_State_0_5:
+ mes "[Agostine, The Legendary Tailor]";
+ mes "\"So, a Cactus Potion?\"";
+ if (countitem(502) < 1) goto L_State_neg;
+ next;
+ delitem 502, 1;
+ goto L_State_bad;
+ close;
+
+L_State_0_6:
+ mes "[Agostine, The Legendary Tailor]";
+ mes "\"So, some milk for me?\"";
+ if (countitem(527) < 1) goto L_State_neg;
+ delitem 527, 1;
+ goto L_State_bad;
+ close;
+
+L_State_0_7:
+ mes "[Agostine, The Legendary Tailor]";
+ mes "\"So, a beer?\"";
+ if (countitem(539) < 1) goto L_State_neg;
+ next;
+ delitem 539, 1;
+ goto L_State_bad;
+ close;
+
+L_State_0_8:
+ mes "[Agostine, The Legendary Tailor]";
+ mes "\"So, a Concentration Potion?\"";
+ if (countitem(568) < 1) goto L_State_neg;
+ next;
+ delitem 568, 1;
+ goto L_State_bad;
+ close;
+
+L_State_0_9:
+ mes "[Agostine, The Legendary Tailor]";
+ mes "\"So, an Iron Potion?\"";
+ if (countitem(567) < 1) goto L_State_neg;
+ next;
+ delitem 567, 1;
+ mes "Agostine looks pleased as he drinks the potion.";
+ next;
+ mes "[Agostine, The Legendary Tailor]";
+ mes "\"Oh! This is damn good! I feel a new man, my friend!\"";
+ next;
+ set zeny, zeny+500;
+ mes "[Agostine, The Legendary Tailor]";
+ mes "\"This is a little reward for your help. Take 500 GP, my friend!\"";
+ set QUEST_WG_state, 2;
+ close;
+
+L_State_neg:
+ mes "[Agostine, The Legendary Tailor]";
+ mes "\"Seems that you lied. You don't have the drink you told me.\"";
+ close;
+
+L_State_bad:
+ mes "[Agostine, The Legendary Tailor]";
+ mes "\"Well, I don't like it so much. Bring me something else.\"";
+ close;
+
+// First Quest: edited version of Forest Bow Quest - Needed: about 30 White Furs and 15.000 GP
+
+L_State_1:
+ mes "[Agostine, The Legendary Tailor]";
+ mes "\"Mmmm... Let me see... This year light colours are fashionable!";
+ mes "Would you like a pair of snow-white Winter Gloves?\"";
+ next;
+ menu
+ "No, thanks. I love dark clothes...", -,
+ "You really can do this for me?", L_State_2;
+ close;
+
+L_State_2:
+ mes "[Agostine, The Legendary Tailor]";
+ mes "\"Well, Winter Gloves are so fashionable for their lovable fur!";
+ mes "Only the best furs can be saw for these gloves!";
+ mes "But, as you see, I am a tailor, not a hunter! So, why don't you bring me the best fluffy's fur you can see?\"";
+ set QUEST_WG_state, 3;
+ next;
+ menu
+ "You are crazy! I won't kill any animal for this!", -,
+ "Sure, I will be back soon!", L_State_3;
+ close;
+
+L_State_3:
+ mes "[Agostine, The Legendary Tailor]";
+ mes "\"Remember, I want the best of fur!\"";
+ set QUEST_WG_state, 4;
+ next;
+ close;
+
+L_State_4:
+ mes "[Agostine, The Legendary Tailor]";
+ mes "\"Oh, my friend! Have you brought me some good furs?\"";
+ if (countitem(611) < 1) close;
+ next;
+ menu
+ "Here, take a look!", L_State_4_try,
+ "Yes, but I need it for something else.", -;
+ close;
+
+L_State_4_try:
+ mes "[Agostine, The Legendary Tailor]";
+ mes "\"Let me see, my friend! It needs to be perfect for my gloves!\"";
+ mes "Agostine examines the patch of fur.";
+ next;
+ delitem 611, 1;
+ set @Temp1,rand(30);
+ if (@Temp1 == 0) goto L_State_4_success;
+ mes "Agostine throws away the white fur.";
+ next;
+ mes "[Agostine, The Legendary Tailor]";
+ mes "\"It was awfully cut! You should pay more attention when you kill fluffies!\"";
+ if (countitem(611) < 1) close;
+ next;
+ menu
+ "Here I have another one!", L_State_4_try,
+ "Sorry, I will be careful...", -;
+ close;
+
+L_State_4_success:
+ mes "Agostine turns into a smile";
+ next;
+ mes "[Agostine, The Legendary Tailor]";
+ mes "\"It's perfect! Perfect! Good job, my friend! I will prepare your gloves right now!\"";
+ next;
+ set QUEST_WG_state, 5;
+ goto L_State_5;
+
+L_State_5:
+ mes "[Agostine, The Legendary Tailor]";
+ mes "\"Ehm, my friend, my work is not free. I need 15,000 GP for the work.\"";
+ next;
+ menu
+ "You are not a tailor, you are a thief!!", -,
+ "I think it's a reasonable price...", L_State_5_pay;
+ close;
+
+L_State_5_pay:
+ if (zeny < 15000) goto L_State_5_nocash;
+ set zeny, zeny-15000;
+ getitem 563, 1;
+ set QUEST_WG_state, 6;
+ mes "[Agostine, The Legendary Tailor]";
+ mes "\"Here they are. You will have the more fashionable hands in the world!\"";
+ close;
+
+L_State_5_nocash:
+ mes "[Agostine, The Legendary Tailor]";
+ mes "\"Seems like you are out of cash. Come back when you have the money.\"";
+ close;
+
+L_State_6:
+ mes "[Agostine, The Legendary Tailor]";
+ mes "\"Oh, I remember you! Your gloves are sooo fashionable, my friend!";
+ mes "Well, I have a good news for you. In this issue of 'TMW Fashion'";
+ mes "I saw a pretty accessory, a pair of Furry Boots, my friend.";
+ mes "I can make your own pair, if you want!\"";
+ next;
+ menu
+ "It's a great idea!", L_State_10,
+ "I'm glamourous enough, thanks", -;
+ close;
+
+// Start of Second Quest: Furry Boots - Needed: About 30 White Furs, 1 pair of Boots and 15.000 GP
+L_State_10:
+ mes "[Agostine, The Legendary Tailor]";
+ mes "\"Perfect! For satisfying your request I need another perfect White Fur";
+ mes "and a pair of Boots, like those you can find in the mines.";
+ mes "They will make you lovely, my friend!\"";
+ set QUEST_WG_state, 7;
+ close;
+
+L_State_11:
+ mes "[Agostine, The Legendary Tailor]";
+ mes "\"So, my friend, have you brought me the right Fur?\"";
+ if (countitem(611) < 1) close;
+ next;
+ menu
+ "Sure, I'm a fluffy hunter!", L_State_11_try,
+ "Not yet, sorry.", -;
+ close;
+
+L_State_11_try:
+ mes "[Agostine, The Legendary Tailor]";
+ mes "\"I'd rather see the patch of fur, first.\"";
+ next;
+ mes "Agostine examines the patch of fur.";
+ next;
+ delitem 611, 1;
+ set @Temp2,rand(30);
+ if (@Temp2 == 0) goto L_State_11_success;
+ mes "Agostine rips the white fur.";
+ next;
+ mes "[Agostine, The Legendary Tailor]";
+ mes "\"That fur was terrible. I won't work with it!\"";
+ if (countitem(611) < 1) close;
+ next;
+ menu
+ "Well, maybe this is better!", L_State_11_try,
+ "I will hunt other fluffies...", -;
+ close;
+
+L_State_11_success:
+ mes "Agostine turns into a smile";
+ next;
+ mes "[Agostine, The Legendary Tailor]";
+ mes "\"This one is good enough, my friend. Good job.\"";
+ delitem 611, 1;
+ set QUEST_WG_state, 8;
+ goto L_State_12;
+
+L_State_12:
+ mes "[Agostine, The Legendary Tailor]";
+ mes "\"I need also a pair of Boots for the work.";
+ mes "And my payment, obviously. 15,000 GP is right.\"";
+ next;
+ menu
+ "Sure, here it is all.", L_State_12_pay,
+ "I missed something, I will be back soon!", -;
+ close;
+
+L_State_12_pay:
+ if (zeny < 15000) goto L_State_12_missing;
+ if (countitem(528) < 1) goto L_State_12_missing;
+ set zeny, zeny-15000;
+ delitem 528, 1;
+ getitem 655, 1;
+ set QUEST_WG_state, 9;
+ mes "[Agostine, The Legendary Tailor]";
+ mes "\"Enjoy your new boots, my friend!\"";
+ close;
+
+L_State_12_missing:
+ mes "[Agostine, The Legendary Tailor]";
+ mes "\"Seems you have forgotten something. Check your inventory";
+ mes "and your pockets!\"";
+ close;
+
+L_State_13:
+ mes "[Agostine, The Legendary Tailor]";
+ mes "\"You are so glamourous, my dear friend!";
+ mes "I have done a very good job on your clothes!\"";
+ close;
+}
diff --git a/npc/new_13-1-snow-village-shops/passages.txt b/npc/new_13-1-snow-village-shops/passages.txt
new file mode 100644
index 00000000..afae9fe4
--- /dev/null
+++ b/npc/new_13-1-snow-village-shops/passages.txt
@@ -0,0 +1,10 @@
+// Clothes shop -> outside
+new_13-1.gat,25,36 warp outside1 0,0,new_11-1.gat,47,50
+// Potions shop -> outside
+new_13-1.gat,64,25 warp outside2 1,1,new_11-1.gat,55,90
+// INN -> outside
+new_13-1.gat,111,33 warp outside3 0,0,new_11-1.gat,64,84
+// Weapons shop -> outside
+new_13-1.gat,32,74 warp outside4 0,0,new_11-1.gat,86,48
+// House -> outside
+new_13-1.gat,72,71 warp outside5 0,0,new_11-1.gat,66,54
diff --git a/npc/new_13-1-snow-village-shops/shops.txt b/npc/new_13-1-snow-village-shops/shops.txt
new file mode 100644
index 00000000..eb84181e
--- /dev/null
+++ b/npc/new_13-1-snow-village-shops/shops.txt
@@ -0,0 +1,19 @@
+// Clothes shop
+new_13-1.gat,27,26,0 shop Taylor 137,523:2000,524:1600,543:800,544:5000,546:10000,586:1000,610,2000
+// Weapons shop
+new_13-1.gat,25,65,0 shop Bracco 135,1201:50,521:1000,522:100,545:20000,529:5
+// Potions shop
+new_13-1.gat,75,26,0 shop Mede 103,501:50,502:70,567:500,568:500
+
+// INN
+new_13-1.gat,111,23,0 script Kane 120,{
+ set @npcName$, "Kane the Inn Keeper";
+ set @cost, 100;
+
+ mes "[" + @npcName$ + "]";
+ mes "\"Welcome strangers.";
+ mes "What? You've already seen an INN like mine?";
+ mes "That's impossible!\"";
+ next;
+ callfunc "Inn";
+}
diff --git a/npc/new_14-1-south-woodland/monsters.txt b/npc/new_14-1-south-woodland/monsters.txt
new file mode 100644
index 00000000..f371e497
--- /dev/null
+++ b/npc/new_14-1-south-woodland/monsters.txt
@@ -0,0 +1,40 @@
+// Map: new_14-1
+// This is South Woodland.
+//
+
+new_14-1.gat,0,0,0,0 monster Scorpion 1003,50,0,0,Mob14::OnScorpion
+new_14-1.gat,0,0,0,0 monster SpikyMushroom 1019,50,0,0,Mob14::OnSpikyMushroom
+new_14-1.gat,0,0,0,0 monster LogHead 1025,50,0,0,Mob14::OnLogHead
+
+new_14-1.gat,0,0,0,0 monster Cobalt 1030,1,2700000,1800000,Mob14::OnCobalt
+
+new_14-1.gat,0,0,0,0 monster SilkWorm 1035,2,60000,30000,Mob14::OnSilkWorm
+
+new_14-1.gat,0,0,0 script Mob14 -1,{
+OnScorpion:
+ set @mobID, 1003;
+ callfunc "MobPoints";
+ break;
+
+OnSpikyMushroom:
+ set @mobID, 1019;
+ callfunc "MobPoints";
+ break;
+
+OnLogHead:
+ set @mobID, 1025;
+ callfunc "MobPoints";
+ break;
+
+OnCobalt:
+ set @mobID, 1030;
+ callfunc "MobPoints";
+ break;
+
+OnSilkWorm:
+ set @mobID, 1035;
+ callfunc "MobPoints";
+ break;
+
+ end;
+}
diff --git a/npc/new_14-1-south-woodland/passages.txt b/npc/new_14-1-south-woodland/passages.txt
new file mode 100644
index 00000000..3f63f074
--- /dev/null
+++ b/npc/new_14-1-south-woodland/passages.txt
@@ -0,0 +1,4 @@
+new_14-1.gat,131,53 warp tofield 2,2,new_16-1.gat,25,53
+new_14-1.gat,48,23 warp tofield 1,1,new_9-1.gat,46,99
+new_14-1.gat,14,54 warp tomap31 0,2,new_31-1.gat,92,54
+new_14-1.gat,55,104 warp tomap32 3,1,new_32-1.gat,56,21 \ No newline at end of file
diff --git a/npc/new_15-1-woodland-desert/monsters.txt b/npc/new_15-1-woodland-desert/monsters.txt
new file mode 100644
index 00000000..4d697599
--- /dev/null
+++ b/npc/new_15-1-woodland-desert/monsters.txt
@@ -0,0 +1,20 @@
+// Map: new_15-1
+// This is the Desert Beach.
+//
+
+new_15-1.gat,0,0,0,0 monster BlackScorpion 1009,20,0,0,Mob15::OnBlackScorpion
+new_15-1.gat,0,0,0,0 monster Snake 1010,10,0,0,Mob15::OnSnake
+
+new_15-1.gat,0,0,0 script Mob15 -1,{
+OnBlackScorpion:
+ set @mobID, 1009;
+ callfunc "MobPoints";
+ break;
+
+OnSnake:
+ set @mobID, 1010;
+ callfunc "MobPoints";
+ break;
+
+ end;
+}
diff --git a/npc/new_15-1-woodland-desert/passages.txt b/npc/new_15-1-woodland-desert/passages.txt
new file mode 100644
index 00000000..d74974ad
--- /dev/null
+++ b/npc/new_15-1-woodland-desert/passages.txt
@@ -0,0 +1,3 @@
+new_15-1.gat,170,75 warp todesert 2,2,new_1-1.gat,15,66
+new_15-1.gat,20,23 warp towoodland 2,0,new_16-1.gat,120,112
+new_15-1.gat,140,19 warp tobeach 2,0,new_34-1.gat,37,109
diff --git a/npc/new_16-1-south-east-woodland/monsters.txt b/npc/new_16-1-south-east-woodland/monsters.txt
new file mode 100644
index 00000000..a7119a3c
--- /dev/null
+++ b/npc/new_16-1-south-east-woodland/monsters.txt
@@ -0,0 +1,35 @@
+// Map: new_16-1
+// This is South-East Woodland.
+//
+
+new_16-1.gat,0,0,0,0 monster Fluffy 1020,50,0,0,Mob16::OnFluffy
+new_16-1.gat,0,0,0,0 monster Flower 1014,40,0,0,Mob16::OnFlower
+
+new_16-1.gat,0,0,0,0 monster Gamboge 1031,1,2700000,1800000,Mob16::OnGamboge
+
+new_16-1.gat,0,0,0,0 monster SilkWorm 1035,2,60000,30000,Mob16::OnSilkWorm
+
+new_16-1.gat,0,0,0 script Mob16 -1,{
+OnFluffy:
+ set @mobID, 1020;
+ callfunc "MobPoints";
+ break;
+
+OnFlower:
+ set @mobID, 1014;
+ callfunc "MobPoints";
+ break;
+
+OnGamboge:
+ set @mobID, 1031;
+ callfunc "MobPoints";
+ break;
+
+OnSilkWorm:
+ set @mobID, 1035;
+ callfunc "MobPoints";
+ break;
+
+
+ end;
+}
diff --git a/npc/new_16-1-south-east-woodland/passages.txt b/npc/new_16-1-south-east-woodland/passages.txt
new file mode 100644
index 00000000..da1a1230
--- /dev/null
+++ b/npc/new_16-1-south-east-woodland/passages.txt
@@ -0,0 +1,4 @@
+new_16-1.gat,120,114 warp todesert 3,0,new_15-1.gat,20,24
+new_16-1.gat,22,54 warp towoodland 2,2,new_14-1.gat,127,53
+new_16-1.gat,68,22 warp warp2 3,1,new_18-1.gat,78,100
+new_16-1.gat,122,21 warp warp2 1,1,new_18-1.gat,132,98
diff --git a/npc/new_17-1-cave-big/monsters.txt b/npc/new_17-1-cave-big/monsters.txt
new file mode 100644
index 00000000..43c0c264
--- /dev/null
+++ b/npc/new_17-1-cave-big/monsters.txt
@@ -0,0 +1,20 @@
+// Map: new_17-1
+// This is the Lake Cave, second level of the Hermit's Cave.
+//
+
+new_17-1.gat,0,0,0,0 monster CaveSnake 1021,40,0,0,Mob17::OnCaveSnake
+new_17-1.gat,0,0,0,0 monster SpikyMushroom 1019,15,0,0,Mob17::OnSpikyMushroom
+
+new_17-1.gat,0,0,0 script Mob17 -1,{
+OnCaveSnake:
+ set @mobID, 1021;
+ callfunc "MobPoints";
+ break;
+
+OnSpikyMushroom:
+ set @mobID, 1019;
+ callfunc "MobPoints";
+ break;
+
+ end;
+}
diff --git a/npc/new_17-1-cave-big/passages.txt b/npc/new_17-1-cave-big/passages.txt
new file mode 100644
index 00000000..9ab031a1
--- /dev/null
+++ b/npc/new_17-1-cave-big/passages.txt
@@ -0,0 +1,2 @@
+new_17-1.gat,71,10 warp firstlvl 3,0,new_4-1.gat,31,24
+new_17-1.gat,129,87 warp cave 0,0,new_35-1.gat,21,55
diff --git a/npc/new_18-1-woodland-village/george.txt b/npc/new_18-1-woodland-village/george.txt
new file mode 100644
index 00000000..42966bf8
--- /dev/null
+++ b/npc/new_18-1-woodland-village/george.txt
@@ -0,0 +1,25 @@
+//
+
+new_18-1.gat,136,36,0 script George 138,{
+ if (getequipid(equip_head) == 617) goto L_Pirate;
+ if (getequipid(equip_head) == 622) goto L_Bandana;
+ if (getequipid(equip_head) == 621) goto L_EyePatch;
+ mes "[George the Pirate]";
+ mes "\"Arrrrh! 'Tis some kind of treasure map!\"";
+ close;
+
+L_Pirate:
+ mes "[George the Pirate]";
+ mes "\"Arrrrh! Ye be wearing a pirate's hat!\"";
+ close;
+
+L_Bandana:
+ mes "[George the Pirate]";
+ mes "\"Arrrrh! Ye remind me of my old first mate!\"";
+ close;
+
+L_EyePatch:
+ mes "[George the Pirate]";
+ mes "\"Arrrrh! Looks like ye lost an eye there!\"";
+ close;
+}
diff --git a/npc/new_18-1-woodland-village/hinnak.txt b/npc/new_18-1-woodland-village/hinnak.txt
new file mode 100644
index 00000000..e358b84c
--- /dev/null
+++ b/npc/new_18-1-woodland-village/hinnak.txt
@@ -0,0 +1,100 @@
+//#################################################################################
+//# #
+//# this script file contains the npc scripts for the quest to obtain a scythe. #
+//# #
+//# Needed: 10 Pink Antenna #
+//# #
+//# Reward: Scythe #
+//# #
+//#################################################################################
+
+//Farmer
+
+new_18-1.gat,101,30,0 script Hinnak 142, {
+ if (Inspector == 10) goto L_NohMask;
+ if (QUEST_Scythe_state == 1) goto L_Exchange;
+ if (QUEST_Scythe_state == 2) goto L_ThanksAgain;
+ mes "[Farmer Hinnak]";
+ mes "\"Argh! I hate them! I @#$% hate them! I @#$% hate these @#$% pinkies!\"";
+ next;
+
+ menu
+ "You need some anger control therapy.", -,
+ "Why do you hate them?", L_Reason;
+ close;
+
+L_Reason:
+ mes "[Farmer Hinnak]";
+ mes "\"These @#$% beasts are jumping around in my fields destroying all my harvest.";
+ mes "But they are too fast. I can't catch them.\"";
+ next;
+
+ menu
+ "Want me to help you?", L_Help,
+ "Well, life ain't fair.", -;
+ close;
+
+L_Help:
+ mes "[Farmer Hinnak]";
+ mes "\"Yes, you look quite fast. Maybe you can catch some of them. That will pay them a lesson.";
+ mes "Slay some of them and bring me 10 of their antennae.\"";
+ set QUEST_Scythe_state, 1;
+ next;
+
+ menu
+ "Sure, I'm on my way", -,
+ "How much is this worth to you?", L_Reward;
+ close;
+
+L_Reward:
+ mes "[Farmer Hinnak]";
+ mes "\"Well, I can't offer you much. But I got an old scythe laying around. Maybe you can use it as a weapon.\"";
+ close;
+
+L_Exchange:
+ mes "[Farmer Hinnak]";
+ mes "Have you got the 10 antennae?";
+ next;
+
+ if (countitem(614) < 10) goto L_Exchange_Notenough;
+
+ menu
+ "Not yet, but I am working on it.", -,
+ "Sure, here they are!", L_Exchange_Exchange;
+ close;
+
+L_Exchange_Exchange:
+ delitem 614, 10;
+ getitem 623, 1;
+ set QUEST_Scythe_state, 2;
+ mes "[Farmer Hinnak]";
+ mes "\"Thank you very much. I've got something for you. My old scythe. Maybe you can use it as a weapon. It is a bit cumbersome but its strikes are deadly.\"";
+ close;
+
+L_Exchange_Notenough:
+ menu
+ "Not yet, but I am working on it.", -;
+ close;
+
+L_ThanksAgain:
+ mes "[Farmer Hinnak]";
+ mes "Thanks again for helping me with the pinkies.";
+ close;
+
+L_NohMask:
+ menu
+ "Did you see anyone in a mask come by here at night?", L_NohMask_Mask,
+ "Did you see anyone with a large satchel come by here at night?", L_NohMask_Satchel,
+ "Nothing...", -;
+ close;
+
+L_NohMask_Mask:
+ mes "[Farmer Hinnak]";
+ mes "\"No. It tends to be too dark to see a mask.\"";
+ close;
+
+L_NohMask_Satchel:
+ mes "[Farmer Hinnak]";
+ mes "\"Yes, I saw someone with a large sack on their back go to the minning camp.\"";
+ close;
+} \ No newline at end of file
diff --git a/npc/new_18-1-woodland-village/monsters.txt b/npc/new_18-1-woodland-village/monsters.txt
new file mode 100644
index 00000000..2bafaaf4
--- /dev/null
+++ b/npc/new_18-1-woodland-village/monsters.txt
@@ -0,0 +1,34 @@
+// Map: new_18-1
+// This is Woodland around Hurnscald.
+//
+
+new_18-1.gat,0,0,0,0 monster Pinkie 1018,20,0,0,Mob18::OnPinkie
+new_18-1.gat,0,0,0,0 monster SpikyMushroom 1019,20,0,0,Mob18::OnSpikyMushroom
+
+new_18-1.gat,0,0,0,0 monster Mauve 1029,1,2700000,1800000,Mob18::OnMauve
+
+new_18-1.gat,0,0,0,0 monster SilkWorm 1035,2,60000,30000,Mob18::OnSilkWorm
+
+new_18-1.gat,0,0,0 script Mob18 -1,{
+OnPinkie:
+ set @mobID, 1018;
+ callfunc "MobPoints";
+ break;
+
+OnSpikyMushroom:
+ set @mobID, 1019;
+ callfunc "MobPoints";
+ break;
+
+OnMauve:
+ set @mobID, 1029;
+ callfunc "MobPoints";
+ break;
+
+OnSilkWorm:
+ set @mobID, 1035;
+ callfunc "MobPoints";
+ break;
+
+ end;
+}
diff --git a/npc/new_18-1-woodland-village/passages.txt b/npc/new_18-1-woodland-village/passages.txt
new file mode 100644
index 00000000..d8fdecb9
--- /dev/null
+++ b/npc/new_18-1-woodland-village/passages.txt
@@ -0,0 +1,19 @@
+// West gate
+new_18-1.gat,54,61 warp warp1 0,1,new_19-1.gat,26,36
+
+// South gate
+new_18-1.gat,78,80 warp warp1 3,0,new_19-1.gat,48,54
+
+// East gate
+new_18-1.gat,128,60 warp warp1 0,1,new_19-1.gat,96,35
+
+// North gate
+new_18-1.gat,78,49 warp warp1 3,0,new_19-1.gat,48,24
+
+// To woodland
+new_18-1.gat,78,101 warp warp1 3,1,new_16-1.gat,68,23
+
+new_18-1.gat,132,100 warp warp1 1,1,new_16-1.gat,122,23
+
+// Mine
+new_18-1.gat,79,17 warp woodland 2,-1,new_37-1.gat,78,96
diff --git a/npc/new_19-1-woodland-village/jack.txt b/npc/new_19-1-woodland-village/jack.txt
new file mode 100644
index 00000000..2c5e8ea8
--- /dev/null
+++ b/npc/new_19-1-woodland-village/jack.txt
@@ -0,0 +1,253 @@
+//#################################################################################
+//# #
+//# This script file contains the npc scripts for two quests: #
+//# #
+//# Quest1: Obtaining a Forest bow #
+//# Needed: About 20 Raw logs, 5000gp, some chatting and running #
+//# Reward: Forest bow #
+//# #
+//# Quest2: Obtaining a Wooden shield #
+//# Needed: 40 Raw logs, 5000gp #
+//# Reward: Wooden shield and 2500exp #
+//# #
+//# Variables used: @QUEST_Forestbow_state, nibbles 0 and 1 #
+//#################################################################################
+
+// Lumberjack
+new_19-1.gat,40,45,0 script Jack 141, {
+ set @RAWLOG, 569;
+ set @RAWLOGS_AMOUNT, 40;
+ set @WOODENSHIELD, 602;
+ set @SHIELD_COST, 5000;
+ set @QUEST_SHIELD_EXP, 2500;
+
+ set @Q_Forestbow_MASK, NIBBLE_0_MASK;
+ set @Q_Forestbow_SHIFT, NIBBLE_0_SHIFT;
+
+ set @Q_Woodenshield_MASK, NIBBLE_1_MASK;
+ set @Q_Woodenshield_SHIFT, NIBBLE_1_SHIFT;
+
+ set @Q_Forestbow, ((QUEST_Forestbow_state & @Q_Forestbow_MASK) >> @Q_Forestbow_SHIFT);
+ set @Q_Woodenshield, ((QUEST_Forestbow_state & @Q_Woodenshield_MASK) >> @Q_Woodenshield_SHIFT);
+
+ if (@Q_Woodenshield >= 3) goto L_Shield_state_3;
+ if (@Q_Woodenshield == 2) goto L_Shield_state_2;
+ if (@Q_Woodenshield == 1) goto L_Shield_state_1;
+ if (@Q_Forestbow > 1) goto L_Bow_state_2;
+
+ mes "[Jack Lumber]";
+ mes "\"Hello there, my name is Jack Lumber, the enemy of all trees. If you need some firewood just let me know.\"";
+ next;
+ if (Inspector == 1) goto L_NohMask_Ask;
+ if (@Q_Forestbow < 1) close;
+
+ next;
+ menu
+ "I heard you aren't delivering any more living wood. Why that?", -;
+
+ mes "[Jack Lumber]";
+ mes "\"Why not?! I value my life, that's why!.\"";
+
+ next;
+ menu
+ "What do you mean?", -;
+
+ mes "[Jack Lumber]";
+ mes "\"A week ago I was going to chop down one of those twigleaf trees in the forest to the southwest. These twigleafs are the trees that give me the living wood you speak of. I was just chopping away with my axe and what happened? One of its branches hit me! I thought it fell down or the wind blew it. It hurt! I shook it off and struck it again with my axe and another branch hit me! I got angry and started to chop off all the branches near the ground so this couldn't happen anymore. But I still can't believe what happened next.\"";
+
+ next;
+ menu
+ "What happened? ", -;
+
+ mes "[Jack Lumber]";
+ mes "\"You'll think I am insane when I tell you.\"";
+
+ next;
+ menu
+ "I won't. I promise.", -;
+
+ mes "[Jack Lumber]";
+ mes "\"OK. After I chopped off a few branches the whole tree started to move. Its roots tore out of the earth, all the branches started to wave around and a face appeared on the trunk. The whole tree CAME TO LIFE! It was mad!\"";
+ next;
+ menu
+ "Did you run away?", -,
+ "Did you fight it?", -;
+
+ mes "[Jack Lumber]";
+ mes "\"I fought, of course! I took my axe and attacked the beast! It hit me here *points at a bruise at his shoulder*, here *lifts his trouser leg to show another bruise* and here *lifts his shirt and reveals some even worse bruises*. But i didn't give up. I chopped away at it, branch after branch, and in the end I chopped off its roots and it fell to the ground motionless.\"";
+
+ next;
+ menu
+ "So you beat the monster? Then why are you so scared?", -;
+
+ mes "[Jack Lumber]";
+ mes "\"Well, I was exhausted and had to rest. A few minutes passed and suddenly I was surrounded by a dozen or more of these living trees!\"";
+
+ next;
+ menu
+ "Did you fight them, too? ", -;
+
+ mes "[Jack Lumber]";
+ mes "\"Are you crazy? I barely destroyed one of those beasts. I was in no shape to fight again. I ran away as fast as i could. Lucky for me the monsters aren't that fast on their tiny root legs. Ha!\"";
+
+ next;
+ menu
+ "So you aren't chopping down trees anymore?", -;
+
+ mes "[Jack Lumber]";
+ mes "\"I still do. It's my job. But I no longer chop those twigleafs, I'll tell you that. I know the bowyer master wants some wood from them, but I don't care. I won't risk my life for a few gold pieces. If you want to, just go to the southwest. But i won't go there ever again.\"";
+
+ next;
+ menu
+ "Southwest you say? OK, thank you.", -;
+
+ set @Q_Forestbow, 2;
+ callsub S_Update_Mask;
+
+ close;
+
+L_Bow_state_2:
+ // Bow state 4: The player has found a perfect piece of wood.
+ if (@Q_Forestbow > 3) goto L_Bow_state_4;
+
+ mes "\"Good luck hunting those tree monsters - you will need it.\"";
+ if (Inspector == 1) goto L_NohMask_Ask;
+ close;
+
+L_Bow_state_4:
+ mes "[Jack Lumber]";
+ mes "\"You've finally found that perfect piece of living wood Alan needs to make a Forest bow, haven't you?\"";
+
+ next;
+ menu
+ "I couldn't afford the bow, though...", L_Shield_state_0,
+ "No, I'm still looking.", L_Bow_state_4_reaffirm,
+ "Yes, I've got the Forest bow now.", -,
+ "I'm a melee warrior, I don't need bows.", L_Shield_state_0;
+
+ // Check if the player tells the truth (continue on in any case)
+ if (@Q_Forestbow > 4) goto L_Shield_state_0;
+
+ mes "[Jack Lumber]";
+ mes "\"Hrmph. I'm someone who respects those speaking the truth.\"";
+
+ next;
+ goto L_Shield_state_0;
+
+L_Bow_state_4_reaffirm:
+ mes "[Jack Lumber]";
+ mes "\"You should go talk to Alan again.\"";
+ close;
+
+L_Shield_state_0:
+ set @Q_Woodenshield, 1;
+ callsub S_Update_Mask;
+
+ if (Sex == 0) set @child_of_jack$, "daughter";
+ if (Sex == 1) set @child_of_jack$, "son";
+
+ mes "[Jack Lumber]";
+ mes "\"You no doubt remember how I struggled with those beasts, fighting for my life. Scared me, those seven-branched little stumps did! Never since that day have I strayed near them. And here comes you, cutting them down one by one. I'm proud of you, to dare those trunks a fight. You're strong as if you were my own " + @child_of_jack$ + "!\"";
+ next;
+ goto L_Shield_state_1;
+
+L_Shield_state_1:
+ mes "[Jack Lumber]";
+ mes "\"I have an idea. What would you say about a new shield?\"";
+ next;
+
+ if (Inspector == 1)
+ menu
+ "No thanks.", L_End,
+ "Yes, please!", -,
+ "Actually, I'd like to know if you've seen any strange happenings in town.", L_NohMask_Answer;
+ if (Inspector != 1)
+ menu
+ "No thanks.", L_End,
+ "Yes, please!", -;
+
+ mes "[Jack Lumber]";
+ mes "\"All I need is " + @RAWLOGS_AMOUNT + " raw logs. This needn't be highest-quality wood; pretty much any log you can find should work. Oh, and I'll also need " + @SHIELD_COST + " GP for other materials.\"";
+ next;
+
+ set @Q_Woodenshield, 2;
+ callsub S_Update_Mask;
+ close;
+
+L_End:
+ close;
+
+L_Shield_state_2:
+ mes "[Jack Lumber]";
+ mes "\"Let's see if you have enough of everything.\"";
+ next;
+
+ if (countitem(@RAWLOG) < @RAWLOGS_AMOUNT) goto L_Not_enough_logs;
+ if (zeny < @SHIELD_COST) goto L_Not_enough_money;
+
+ delitem @RAWLOG, @RAWLOGS_AMOUNT;
+ set zeny, zeny - @SHIELD_COST;
+ getexp @QUEST_SHIELD_EXP, 0;
+ getitem @WOODENSHIELD, 1;
+
+ set @Q_Woodenshield, 3;
+ callsub S_Update_Mask;
+ mes "[Jack Lumber]";
+ mes "\"Have a seat.\"";
+ mes "Jack saws the logs into pieces, then shaves them until they are smooth to the touch.";
+ mes "Applying some strong-smelling liquid, he tans them in darker hues.";
+ next;
+
+ mes "[Jack Lumber]";
+ mes "Grabbing one of two leftover pieces, he begins to carve it into a round shape, then repeats this with the second piece-- shield handles, from what you can tell.";
+ next;
+
+ mes "[Jack Lumber]";
+ mes "Meanwhile, the sun has dried the other pieces. Jack places them next to each other, adds a frame, and nails everything together.";
+ mes "The resulting shield looks usable already, but Jack applies another liquid to it and leaves it to dry for a few moments.";
+ next;
+
+ mes "[Jack Lumber]";
+ mes "Finally, he hands the shield to you.";
+ mes "\"Enjoy your new shield!\"";
+ mes "[" + @QUEST_SHIELD_EXP + " experience points]";
+ next;
+ goto L_End;
+
+L_Not_enough_logs:
+ mes "[Jack Lumber]";
+ mes "\"You don't have enough wood for me to craft this shield; I need a total of " + @RAWLOGS_AMOUNT + " raw logs.\"";
+ close;
+
+L_Not_enough_money:
+ mes "[Jack Lumber]";
+ mes "\"You don't have enough gold, I'm afraid. I need " + @SHIELD_COST + " GP to finish your shield.\"";
+ close;
+
+L_Shield_state_3:
+ mes "[Jack Lumber]";
+ mes "\"I hope that my shield will serve you well!\"";
+ if (Inspector == 1)
+ menu
+ "Me too.", -,
+ "Have you seen anything that might be connected to the recent robberies in town?", L_NohMask_Answer;
+ close;
+
+L_NohMask_Ask:
+ menu
+ "I'll keep that in mind.", -,
+ "Have you seen anything that might be connected to the recent robberies in town?", L_NohMask_Answer;
+ close;
+
+L_NohMask_Answer:
+ mes "[Jack Lumber]";
+ mes "\"Sorry, no.\"";
+ close;
+
+S_Update_Mask:
+ set QUEST_Forestbow_state,
+ (QUEST_Forestbow_state & ~(@Q_Forestbow_MASK | @Q_Woodenshield_MASK))
+ | (@Q_Forestbow << @Q_Forestbow_SHIFT)
+ | (@Q_Woodenshield << @Q_Woodenshield_SHIFT);
+ return;
+}
diff --git a/npc/new_19-1-woodland-village/milly.txt b/npc/new_19-1-woodland-village/milly.txt
new file mode 100644
index 00000000..35f5fda6
--- /dev/null
+++ b/npc/new_19-1-woodland-village/milly.txt
@@ -0,0 +1,25 @@
+new_19-1.gat,81,41,0 script Milly 114, {
+ mes "[Milly]";
+ mes "\"Hello.\"";
+ next;
+ if (Inspector == 1) goto L_NohMask;
+ close;
+
+L_NohMask:
+ menu
+ "Have you seen anything strange lately?", L_NohMask_Strange,
+ "Do you know anything about the recent robberies?", L_NohMask_Robbery,
+ "Yes, it is.", -;
+ close;
+
+L_NohMask_Strange:
+ mes "[Milly]";
+ mes "\"I haven't seen anything strange.\"";
+ close;
+
+L_NohMask_Robbery:
+ mes "[Milly]";
+ mes "\"No, sorry.\"";
+ close;
+}
+
diff --git a/npc/new_19-1-woodland-village/old_man.txt b/npc/new_19-1-woodland-village/old_man.txt
new file mode 100644
index 00000000..0d6d1562
--- /dev/null
+++ b/npc/new_19-1-woodland-village/old_man.txt
@@ -0,0 +1,34 @@
+// Old man
+
+new_19-1.gat,85,51,0 script Old Man 159,{
+ mes "[Old Man]";
+ mes "\"Don't let those monsters get to you.\"";
+ next;
+ if (Inspector == 1) goto L_NohMask_Ask;
+ if (Inspector == 6) goto L_NohMask_Accuse;
+ close;
+
+L_NohMask_Ask:
+ menu
+ "Have you seen anything strange lately?", L_NohMask_Ask_Nothing,
+ "Do you know anything about the recent robberies?", L_NohMask_Ask_Nothing,
+ "I won't, thank you.", -;
+ close;
+
+L_NohMask_Ask_Nothing:
+ mes "[Old Man]";
+ mes "\"I'm sorry, but I didn't see anything. You should ask my old woman.\"";
+ close;
+
+L_NohMask_Accuse:
+ menu
+ "The leader of the troupe said you hung around them a lot while they were in town.", L_NohMask_Accuse_Respond,
+ "I won't, thank you.", -;
+ close;
+
+L_NohMask_Accuse_Respond:
+ mes "[Old Man]";
+ mes "\"Yes, I hung around the theater a lot. I was an actor when I was younger. But I wasn't there that night. Me and the wife were at home all night.\"";
+ set Inspector, 7;
+ close;
+}
diff --git a/npc/new_19-1-woodland-village/old_woman.txt b/npc/new_19-1-woodland-village/old_woman.txt
new file mode 100644
index 00000000..b4879340
--- /dev/null
+++ b/npc/new_19-1-woodland-village/old_woman.txt
@@ -0,0 +1,56 @@
+// Old woman
+
+new_19-1.gat,29,43,0 script Old Woman 154,{
+ mes "[Old Woman]";
+ mes "\"Hello deary.\"";
+ next;
+ if ((Inspector >= 1 && Inspector <= 7) || Inspector == 9) goto L_NohMask;
+ close;
+
+L_NohMask:
+ if (Inspector == 7) goto L_NohMask_Alibi;
+ callfunc "ProcessEquip";
+ if (@torsoC == cDarkBlue && @legsC == cDarkBlue) goto L_NohMask_Fake;
+ if (Inspector >= 3 && Inspector <= 6) close;
+
+ menu
+ "Have you seen anything strange lately?", L_NohMask_FirstAsk,
+ "Do you know anything about the recent robberies?", L_NohMask_FirstAsk,
+ "Hello", -;
+ close;
+
+L_NohMask_FirstAsk:
+ mes "[Old Woman]";
+ mes "\"Yes, but I'm only talking to the inspector himself!\"";
+ if (Inspector == 1) set Inspector, 2;
+ close;
+
+L_NohMask_Alibi:
+ menu
+ "Was your husband with you at home all night the last night that the troupe was in town?", -;
+
+ mes "[Old Woman]";
+ mes "\"Yes, we were both at home all night.\"";
+ set Inspector, 8;
+ close;
+
+L_NohMask_Fake:
+ if (Inspector == 9) goto L_NohMask_Fake_Satchel;
+ if (Inspector >= 3 && Inspector <= 6) got L_NohMask_Filler;
+
+ mes "[Old Woman]";
+ mes "\"I saw someone sneaking around town wearing a theater mask. It looked like one of the masks used by the troupe that was in town recently.\"";
+ set Inspector, 3;
+ close;
+
+L_NohMask_Filler:
+ mes "[Old Woman]";
+ mes "\"I hope you castch that naughty person!\"";
+ close;
+
+L_NohMask_Fake_Satchel:
+ mes "[Old Woman]";
+ mes "\"I've remembered something else. The night the troupe left, I saw someone with a theater mask take a large satchel out of town. He was heading north.\"";
+ set Inspector, 10;
+ close;
+}
diff --git a/npc/new_19-1-woodland-village/passages.txt b/npc/new_19-1-woodland-village/passages.txt
new file mode 100644
index 00000000..990b50e7
--- /dev/null
+++ b/npc/new_19-1-woodland-village/passages.txt
@@ -0,0 +1,30 @@
+// West gate
+new_19-1.gat,23,36 warp warp2 1,1,new_18-1.gat,53,61
+
+// South gate
+new_19-1.gat,48,56 warp warp2 3,1,new_18-1.gat,78,82
+
+// East gate
+new_19-1.gat,97,36 warp warp2 1,1,new_18-1.gat,129,60
+
+// North gate
+new_19-1.gat,48,23 warp warp2 3,1,new_18-1.gat,78,48
+
+// indoor <-> outdoor and indoor <-> indoor
+
+// Inn
+new_19-1.gat,35,29 warp out-in 1,1,new_20-1.gat,50,55
+
+// Archer Shop
+new_19-1.gat,59,33 warp out-in 0,0,new_20-1.gat,95,29
+
+// Potion Shop
+new_19-1.gat,71,30 warp out-in 0,0,new_20-1.gat,130,25
+
+// Doctor
+new_19-1.gat,80,31 warp out-in 0,0,new_20-1.gat,149,66
+
+// Blacksmith
+
+// Mayor
+new_19-1.gat,72,44 warp out-in 0,0,new_20-1.gat,113,77
diff --git a/npc/new_19-1-woodland-village/sabine.txt b/npc/new_19-1-woodland-village/sabine.txt
new file mode 100644
index 00000000..f30bded2
--- /dev/null
+++ b/npc/new_19-1-woodland-village/sabine.txt
@@ -0,0 +1,26 @@
+// Girl sitting on bench
+
+new_19-1.gat,89,27,0 script Sabine 106,{
+ mes "[Sabine]";
+ mes "\"Isn't this place pretty? I love hanging out here!\"";
+ next;
+ if (Inspector == 1) goto L_NohMask;
+ close;
+
+L_NohMask:
+ menu
+ "Have you seen anything strange lately?", L_NohMask_Strange,
+ "Do you know anything about the recent robberies?", L_NohMask_Robbery,
+ "Yes, it is.", -;
+ close;
+
+L_NohMask_Strange:
+ mes "[Sabine]";
+ mes "\"I haven't seen anything strange.\"";
+ close;
+
+L_NohMask_Robbery:
+ mes "[Sabine]";
+ mes "\"No, sorry.\"";
+ close;
+}
diff --git a/npc/new_19-1-woodland-village/soul-menhir.txt b/npc/new_19-1-woodland-village/soul-menhir.txt
new file mode 100644
index 00000000..1943cae4
--- /dev/null
+++ b/npc/new_19-1-woodland-village/soul-menhir.txt
@@ -0,0 +1,8 @@
+new_19-1.gat,53,40,0 script Soul Menhir 144, {
+ set @map$, "new_19-1.gat";
+ set @x, 53;
+ set @y, 41;
+ callfunc "SoulMenhir";
+}
+
+
diff --git a/npc/new_2-1-cave1/miners.txt b/npc/new_2-1-cave1/miners.txt
new file mode 100644
index 00000000..1bbb1637
--- /dev/null
+++ b/npc/new_2-1-cave1/miners.txt
@@ -0,0 +1,39 @@
+//
+
+new_2-1.gat,35,35,6 script Nathan 109,{
+ mes "[Nathan the Miner]";
+ mes "\"It's very dangerous in here.";
+ mes "We had a big earthquake here";
+ mes "just recently, too... so be";
+ mes "careful!\"";
+ close;
+}
+
+new_5-1.gat,32,94,6 script Naem 109,{
+ mes "[Naem the Miner]";
+ mes "\"Do you want me to lift you to the upper level?\"";
+ next;
+ menu
+ "Sure", L_Sure,
+ "Not yet!", -;
+ close;
+
+L_Sure:
+ warp "new_2-1.gat", 87, 99;
+ close;
+}
+
+new_2-1.gat,85,97,6 script Naem 109,{
+ mes "[Naem the Miner]";
+ mes "\"We discovered an underground palace.";
+ mes "Do you want me to let you in?\"";
+ next;
+ menu
+ "Sure", L_Sure,
+ "Not yet!", -;
+ close;
+
+L_Sure:
+ warp "new_5-1.gat", 34, 92;
+ close;
+}
diff --git a/npc/new_2-1-cave1/monsters.txt b/npc/new_2-1-cave1/monsters.txt
new file mode 100644
index 00000000..b673ef65
--- /dev/null
+++ b/npc/new_2-1-cave1/monsters.txt
@@ -0,0 +1,20 @@
+// Map: new_2-1
+// This is the Desert mines south of Tulimshar -- level 1.
+//
+
+new_2-1.gat,0,0,0,0 monster RedSlime 1008,30,2500,0,Mob2::OnRedSlime
+new_2-1.gat,0,0,0,0 monster BlackScorpion 1009,15,2500,0,Mob2::OnBlackScorpion
+
+new_2-1.gat,0,0,0 script Mob2 -1,{
+OnRedSlime:
+ set @mobID, 1008;
+ callfunc "MobPoints";
+ break;
+
+OnBlackScorpion:
+ set @mobID, 1009;
+ callfunc "MobPoints";
+ break;
+
+ end;
+}
diff --git a/npc/new_2-1-cave1/passages.txt b/npc/new_2-1-cave1/passages.txt
new file mode 100644
index 00000000..e11badd6
--- /dev/null
+++ b/npc/new_2-1-cave1/passages.txt
@@ -0,0 +1 @@
+new_2-1.gat,36,30 warp caveexit 3,0,new_1-1.gat,25,95
diff --git a/npc/new_20-1-woodland-village/alan.txt b/npc/new_20-1-woodland-village/alan.txt
new file mode 100644
index 00000000..d8c2f51e
--- /dev/null
+++ b/npc/new_20-1-woodland-village/alan.txt
@@ -0,0 +1,211 @@
+//#################################################################################
+//# #
+//# This script file contains the npc scripts for the quest to obtain a forestbow #
+//# #
+//# Needed: 10 Raw Logs, 5000gp, some chatting and running. #
+//# #
+//# Reward: Forest Bow #
+//#################################################################################
+
+// Archer Shop Master
+new_20-1.gat,99,23,0 script Alan 125, {
+ set @Q_MASK, NIBBLE_0_MASK;
+ set @Q_SHIFT, NIBBLE_0_SHIFT;
+
+ set @Q_status, ((QUEST_Forestbow_state) & @Q_MASK) >> @Q_SHIFT;
+
+ if (@Q_status == 1) goto L_State_1;
+ if (@Q_status == 2) goto L_State_2;
+ if (@Q_status == 3) goto L_State_3;
+ if (@Q_status == 4) goto L_State_4;
+ if (@Q_status == 5) goto L_State_5;
+
+ mes "[Alan]";
+ mes "\"When you want to buy something then please speak to my apprentice. I am only doing special requests.\"";
+ next;
+ if (Inspector == 1)
+ menu
+ "OK, thanks", -,
+ "Can you make me a really good bow?", L_State_0_1,
+ "Have you seen anything strange recently that might be connected to the robberies?", L_NohMask_Answer;
+ if (Inspector != 1)
+ menu
+ "OK, thanks", -,
+ "Can you make me a really good bow?", L_State_0_1;
+ close;
+
+L_State_0_1:
+ mes "[Alan]";
+ mes "\"You mean like one of my legendary forest bows?\"";
+ next;
+ menu
+ "Yes, that would be nice.", -;
+ mes "[Alan]";
+ mes "\"Sorry, I am not making these anymore.\"";
+ next;
+ menu
+ "Oh, too bad.", -,
+ "What? Why that?", L_State_0_2;
+ close;
+
+L_State_0_2:
+ mes "[Alan]";
+ mes "\"The problem is that I am short of material. My forestbows are not made of regular wood, you know.";
+ mes "They are made of special living wood. And only the best logs of living wood are good enough for them.";
+ mes "I used to get these logs from Jack, the lumberjack. But the last time I asked him for a new delivery he said that he would never again get any for me.\"";
+
+ set @Q_status, 1;
+ callsub S_Update_Var;
+
+ next;
+ menu
+ "Too bad.", -,
+ "Did you ask him why?", L_State_0_3;
+ close;
+
+L_State_0_3:
+ mes "[Alan]";
+ mes "\"Sure I did. But he just told me to leave him alone. Maybe you could ask him what's wrong?\"";
+ next;
+ menu
+ "OK, I'll ask him.", -,
+ "I am sure he got his reasons.", -;
+ close;
+
+L_State_1:
+ mes "[Alan]";
+ mes "\"Did you already ask Jack why he won't deliver me any more living wood?\"";
+ next;
+ if (Inspector == 1)
+ menu
+ "No, I haven't had the time yet", -,
+ "No, I didn't find him yet.", L_State_1_1,
+ "Have you seen anything strange recently that might be connected to the robberies?", L_NohMask_Answer;
+ if (Inspector != 1)
+ menu
+ "No, I haven't had the time yet", -,
+ "No, I didn't find him yet.", L_State_1_1;
+ close;
+
+L_State_1_1:
+ mes "[Alan]";
+ mes "\"When you leave my shop just go southwest over the village plaza. You can't miss it.\"";
+ close;
+
+L_State_2:
+ mes "[Alan]";
+ mes "\"Did you already ask Jack why he won't deliver me any more living wood?\"";
+ next;
+ if (Inspector == 1)
+ menu
+ "Yes, I did. He said that the trees turned into dangerous monsters.", -,
+ "Have you seen anything strange recently that might be connected to the robberies?", L_NohMask_Answer;
+ if (Inspector != 1)
+ menu
+ "Yes, I did. He said that the trees turned into dangerous monsters.", -;
+ mes "[Alan]";
+ mes "\"Oh, that's really bad news. Maybe you can do his job?";
+ mes "When you kill some of these tree monsters and bring me their wood I can take a look at them.";
+ mes "Maybe you will find a piece of wood that is strong enough to become one of my forest bows.\"";
+
+ set @Q_status, 3;
+ callsub S_Update_Var;
+
+ close;
+
+L_State_3:
+ mes "[Alan]";
+ mes "\"How is the hunt going? Did you bring me any wood?\"";
+ if (countitem(569) < 1) close;
+ next;
+ if (Inspector == 1)
+ menu
+ "Here, take a look!", L_State_3_try,
+ "Yes, but I need it for something else.", -,
+ "Have you seen anything strange recently that might be connected to the robberies?", L_NohMask_Answer;
+ if (Inspector != 1)
+ menu
+ "Here, take a look!", L_State_3_try,
+ "Yes, but I need it for something else.", -;
+ close;
+
+L_State_3_try:
+ mes "[Alan]";
+ mes "\"Hmmm... looks ok, but is it strong enough?\"";
+ mes "Alan bends the log over his knee.";
+ next;
+ delitem 569, 1;
+ set @Temp1, rand(20);
+ if (@Temp1 == 0) goto L_State_3_success;
+ mes "The log breaks with a loud crack";
+ next;
+ mes "[Alan]";
+ mes "\"Sorry, this log was too weak for one of my forest bows. Now it is junk. Give me another.\"";
+ if (countitem(569) < 1) close;
+ next;
+ menu
+ "Sure, here you go.", L_State_3_try,
+ "Hey! Stop breaking my stuff!", -;
+ close;
+
+L_State_3_success:
+ mes "Alan tries as hard as he can but the log won't bend.";
+ next;
+ mes "[Alan]";
+ mes "\"Aaah! Yes! That is a really fine piece of wood you bought me. It will make an excelent bow!\"";
+ next;
+ set @Q_status, 4;
+ callsub S_Update_Var;
+
+L_State_4:
+ mes "[Alan]";
+ mes "\"I can make you a really nice forest bow out of this. I just need 10,000 GP for material and work time.\"";
+ next;
+ if (Inspector == 1)
+ menu
+ "10,000??? What a ripoff!", -,
+ "Sure, here you go!", L_State_4_pay,
+ "Have you seen anything strange recently that might be connected to the robberies?", L_NohMask_Answer;
+ if (Inspector != 1)
+ menu
+ "10,000??? What a ripoff!", -,
+ "Sure, here you go!", L_State_4_pay;
+ close;
+
+L_State_4_pay:
+ if (zeny < 10000) goto L_State_4_nocash;
+ set zeny, zeny - 10000;
+ getitem 545, 1;
+ set @Q_status, 5;
+ callsub S_Update_Var;
+ mes "[Alan]";
+ mes "\"Here you go - have fun with it.\"";
+ close;
+
+L_State_4_nocash:
+ mes "[Alan]";
+ mes "\"Seems like you are out of cash.\"";
+ close;
+
+L_State_5:
+ mes "[Alan]";
+ mes "\"I hope you are statisfied with your forest bow. It is one of my best works.\"";
+ next;
+
+ if (Inspector == 1)
+ menu
+ "I am!", -,
+ "Have you seen anything strange recently that might be connected to the robberies?", L_NohMask_Answer;
+ close;
+
+L_NohMask_Answer:
+ mes "[Alan]";
+ mes "\"No.\"";
+ close;
+
+S_Update_Var:
+ set QUEST_Forestbow_state,
+ (QUEST_Forestbow_state & ~(@Q_MASK)
+ | (@Q_status << @Q_SHIFT));
+ return;
+}
diff --git a/npc/new_20-1-woodland-village/doctor.txt b/npc/new_20-1-woodland-village/doctor.txt
new file mode 100644
index 00000000..825db4cc
--- /dev/null
+++ b/npc/new_20-1-woodland-village/doctor.txt
@@ -0,0 +1,67 @@
+// Doctor
+
+new_20-1.gat,148,25,0 script Doctor 107,{
+ if (getequipid(equip_head) == 616) goto L_Axe;
+ if (getequipid(equip_head) == 621) goto L_Eyepatch;
+
+ mes "[Doctor]";
+ mes "\"Hello, can I help you?\"";
+ next;
+
+ if (Inspector == 1)
+ menu
+ "I think I am sick!", L_Cure,
+ "No, I feel fine.", -,
+ "Have you seen anything strange in town? Anything that might have to do with the robberies?", L_NohMask;
+ if (Inspector != 1)
+ menu
+ "I think I am sick!", L_Cure,
+ "No, I feel fine.", -;
+
+ mes "[Doctor]";
+ mes "\"Then please stop wasting my precious time.\"";
+ close;
+
+L_Cure:
+ mes "[Doctor]";
+ mes "\"That is impossible. Status ailments aren't ingame yet!\"";
+ close;
+
+L_Axe:
+ mes "[Doctor]";
+ mes "\"Oh my, what happened to you?\"";
+ next;
+ mes "[Doctor]";
+ mes "\"Wait. Thats just a fake. Shame on you!\"";
+ next;
+ close;
+
+L_Eyepatch:
+ mes "[Doctor]";
+ mes "\"Would you like a glass eye to replace that eye patch you have? We just got a whole load of them in today. I'll even let you keep the patch as a souvenir.\"";
+ next;
+ menu
+ "Yes, please.", L_Eyepatch_GlassEye,
+ "No thank you", -;
+
+ mes "[Doctor]";
+ mes "\"If you change you're mind, please come back and see me.\"";
+ next;
+ close;
+
+L_Eyepatch_GlassEye:
+ mes "[Doctor]";
+ mes "\"Now, where did I put that box of eyes...\"";
+ mes "He goes off to look for them and comes back empty handed.";
+ next;
+
+ mes "[Doctor]";
+ mes "\"I can't seem to find where I put that box. YOu should come back later, I may have found them by then.\"";
+ next;
+ close;
+
+L_NohMask:
+ mes "[Doctor]";
+ mes "\"No, I haven't seen anything.\"";
+ close;
+}
diff --git a/npc/new_20-1-woodland-village/drunks.txt b/npc/new_20-1-woodland-village/drunks.txt
new file mode 100644
index 00000000..10a47b41
--- /dev/null
+++ b/npc/new_20-1-woodland-village/drunks.txt
@@ -0,0 +1,16 @@
+//Left drinking contest guy
+
+new_20-1.gat,65,55,0 script Drinker 121, {
+ mes "[Binge Drinker]";
+ mes "\"Ha! I'll drink muuuch mo.. more than you! Im not ooone biiit dr...dr..unk!\"";
+ close;
+}
+
+//Right drinking contest guy
+
+new_20-1.gat,68,55,0 script Drinker 121, {
+ mes "[Binge Drinker]";
+ mes "\"I can still drink more! Better give up you... you... teelotaler! MORE BEER MELINDA!\"";
+ //I know it's called "teetotaler". That error is on purpose.
+ close;
+}
diff --git a/npc/new_20-1-woodland-village/inspector.txt b/npc/new_20-1-woodland-village/inspector.txt
new file mode 100644
index 00000000..89192104
--- /dev/null
+++ b/npc/new_20-1-woodland-village/inspector.txt
@@ -0,0 +1,127 @@
+//
+
+new_20-1.gat,24,99,0 script Inspector#Hurnscald 150,{
+ if (Inspector == 0 && BaseLevel >= 30) goto L_NohMask_Start;
+ if (Inspector == 1) goto L_NohMask_AskVillage;
+ if (Inspector == 2) goto L_NohMask_OldWoman;
+ if (Inspector == 3) goto L_NohMask_TheaterMask;
+ if (Inspector == 4) goto L_NohMask_TravelingTroupe;
+ if (Inspector == 5) goto L_NohMask_OldMan;
+ if (Inspector == 6) goto L_NohMask_OldMan_2;
+ if (Inspector == 7) goto L_NohMask_Alibi;
+ if (Inspector == 8) goto L_NohMask_Alibi_2;
+ if (Inspector == 9) goto L_NohMask_Alibi_3;
+ if (Inspector == 10) goto L_NohMask_Satchel;
+ if (Inspector == 11) goto L_NohMask_Basement;
+ if (Inspector == 12) goto L_NohMask_Note;
+ if (Inspector == 13) goto L_NohMask_TravelingTroupe_2;
+ if (Inspector == 14) goto L_NohMask_Over;
+ if (Inspector == 15) goto L_NohMask_End;
+ mes "[Inspector]";
+ mes "\"I'm sorry, but I'm busy looking into this string of robberies.\"";
+ close;
+
+L_NohMask_Start:
+ mes "\"Hmm...what to do.\"";
+ mes "He looks up and into your face.";
+ next;
+
+ mes "[Inspector]";
+ mes "\"You look capable, will you help me solve these robberies?\"";
+ next;
+
+ menu
+ "Yes", L_NohMask_Accept,
+ "No", -;
+ close;
+
+L_NohMask_Accept:
+ set Inspector, 1;
+ mes "[Inspector]";
+ mes "\"Ok then. I'd like you to ask the villagers about the recent string of robberies.\"";
+ close;
+
+L_NohMask_AskVillage:
+ mes "[Inspector]";
+ mes "\"Please continue talking to the villagers.\"";
+ close;
+
+L_NohMask_OldWoman:
+ mes "[Inspector]";
+ mes "\"Hm...I don't know if I trust her eyesight or memory. See if someone else knows anything.\"";
+ close;
+
+L_NohMask_TheaterMask:
+ set Inspector, 4;
+ mes "[Inspector]";
+ mes "\"Someone in a theater mask, eh? There was a traveling theater troupe in town recently, but they've moved on to Tulimshar. Please go talk to their leader about this.\"";
+ close;
+
+L_NohMask_TravelingTroupe:
+ mes "[Inspector]";
+ mes "\"Please go talk to the leader of the traveling troupe about the theater mask.\"";
+ close;
+
+L_NohMask_OldMan:
+ set Inspector, 6;
+ mes "[Inspector]";
+ mes "\"Hm...an old man? Could you interrogate him for me?\"";
+ close;
+
+L_NohMask_OldMan_2:
+ mes "[Inspector]";
+ mes "\"Have you talked with the old man yet?\"";
+ close;
+
+L_NohMask_Alibi:
+ mes "[Inspector]";
+ mes "\"Can you verify that with his wife?\"";
+ close;
+
+L_NohMask_Alibi_2:
+ set Inspector, 9;
+ mes "[Inspector]";
+ mes "\"Hm...then it couldn't be him. I'm not sure where to go from here, maybe you can find something else. Try talking to everyone again.\"";
+ close;
+
+L_NohMask_Alibi_3:
+ mes "[Inspector]";
+ mes "\"Made any progress yet?\"";
+ close;
+
+L_NohMask_Satchel:
+ mes "[Inspector]";
+ mes "\"Then go north and investigate!\"";
+ close;
+
+L_NohMask_Basement:
+ mes "[Inspector]";
+ mes "\"Did you look over the basement?\"";
+ close;
+
+L_NohMask_Note:
+ set Inspector, 13;
+ mes "[Inspector]";
+ mes "\"What a strange note. I'll keep track of this, while you return the mask to the troupe.\"";
+ mes "";
+ mes "\"By the way, stay sharp! I may call upon you again.\"";
+ close;
+
+L_NohMask_TravelingTroupe_2:
+ mes "[Inspector]";
+ mes "\"Please return the mask to the traveling troupe.\"";
+ close;
+
+L_NohMask_Over:
+ set Inspector, 15;
+ mes "[Inspector]";
+ mes "\"My men have found all of the stolen items. They were all in the mining camp. We still don't know who did it.\"";
+ mes "[2500 experience points]";
+ getexp 2500, 0;
+ close;
+
+L_NohMask_End:
+ mes "[Inspector]";
+ mes "\"Remember to stay sharp. I might need your help on another case.\"";
+ close;
+}
diff --git a/npc/new_20-1-woodland-village/kfahr.txt b/npc/new_20-1-woodland-village/kfahr.txt
new file mode 100644
index 00000000..3ca72226
--- /dev/null
+++ b/npc/new_20-1-woodland-village/kfahr.txt
@@ -0,0 +1,1224 @@
+//#################################################################################
+//#
+//# Kfahr the Desert Warrior.
+//# Participates in two quests:
+//# - Sole participant in the Bone Knife quest:
+//# (10 black scorpion stingers + 10 small mushrooms + level 40) -> Bone Knife
+//# - Sole participant in the Golden Stinger subquest
+//# (subquest for the Monster Oil subquest, cf. Nicholas' Setzer Quest)
+//# (win arm-wrestling + bring 10 snake skins + level 60) -> golden stinger
+//#
+//# Variables used: @QUEST_Forestbow_state, nibble 2 (knife quest)
+//# @QUEST_Forestbow_state, nibble 3 (monster oil subquest)
+//#
+//#################################################################################
+
+new_20-1.gat,67,57,0 script Kfahr 125,{
+
+ set @QS_NEWBIE, 0;
+ set @QS_MET_KFAHR, 1;
+ set @QS_KNOWS_KFAHR, 2;
+ set @QS_KNIFE_QUEST, 3;
+ set @QS_KNIFE_QUEST_DONE, 4;
+ set @QS_LOST_WRESTLING, 5;
+ set @QS_STINGER_QUEST, 6;
+ set @QS_STINGER_QUEST_DONE, 7;
+
+ set @BEER, 539;
+
+ set @BLACK_STINGER, 709;
+ set @BLACK_STINGERS_NR, 10;
+ set @MUSHROOM, 566;
+ set @MUSHROOMS_NR, 10;
+ set @SNAKE_SKIN, 641;
+ set @SNAKE_SKINS_NR, 10;
+
+ set @KNIFE_QUEST_XP, 50000;
+ set @STINGER_QUEST_XP, 80000;
+
+ set @BONE_KNIFE, 570;
+ set @GOLDEN_STINGER, 706;
+
+ set @Q_MASK, NIBBLE_2_MASK;
+ set @Q_SHIFT, NIBBLE_2_SHIFT;
+
+ set @Q_status, (QUEST_Forestbow_state & @Q_MASK) >> @Q_SHIFT;
+
+ set @Q_needs_stinger, ((QUEST_Forestbow_state & NIBBLE_3_MASK) >> NIBBLE_3_SHIFT) > 1;
+
+ if (@Q_status == @QS_KNIFE_QUEST)
+ goto L_knife_quest_check;
+
+ if (@Q_status == @QS_STINGER_QUEST)
+ goto L_stinger_quest_check;
+
+ if (@Q_status > @QS_NEWBIE)
+ goto L_meet_again;
+
+ mes "[Warrior]";
+ mes "You stand before a battle-scarred, darkly tanned warrior, brimming with muscles.";
+ mes "Just looking at him you smell danger, adventure, excitement...";
+ next;
+
+ mes "[Warrior]";
+ mes "On second thought, he really could use a bath.";
+ mes "";
+ mes "The warrior turns towards you, grinning broadly.";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"Why, hello there! Come to visit Kfahr the Warrior to hear of my exploits, have you?\"";
+ mes "He laughs heartily and gives you a slap on the back.";
+ mes "\"Can't blame you, can't blame you at all! Here, take a seat!\"";
+ next;
+
+ set @has_beer, 0;
+ set @beer_count, 0;
+ set @last_story, 0;
+
+ set @Q_status, @QS_MET_KFAHR;
+ callsub L_Update_Var;
+
+ goto L_main_menu;
+
+L_meet_again:
+ mes "[Kfahr the Warrior]";
+ mes "Kfahr nods and grins as you greet him.";
+ mes "\"Came back for more stories? Have a seat!\"";
+ next;
+ goto L_main_menu;
+
+L_main_menu:
+ if (@Q_status >= @QS_KNOWS_KFAHR)
+ goto L_real_main_menu;
+ menu "Who are you?", -,
+ "Goodbye.", L_end;
+
+ mes "[Kfahr the Warrior]";
+ mes "Kfahr laughs again.";
+ mes "\"Surely you jest! You must have heard of Kfahr, Slayer of Toby Rick the Desert Worm, Raider of the Lost Temple, Hero of Tulimshar?\"";
+ next;
+
+ menu "Uhm...", -,
+ "Well...", -,
+ "To be quite honest...", -,
+ "Excuse me, someone is, er, whispering me...", L_end;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"Ah, I knew it! So you have come to hear some tales about the dangers of the desert? You've come to the right man!\"";
+ next;
+
+ set @Q_status, @QS_KNOWS_KFAHR;
+ callsub L_Update_Var;
+ goto L_real_main_menu;
+
+L_tale_sub:
+ if (@current_story == @last_story)
+ goto L_same_story_abort;
+ if (@has_beer == 0)
+ goto L_out_of_beer_abort;
+ set @last_story, @current_story;
+ set @has_beer, 0;
+ set @story_abort, 0;
+ return;
+
+L_same_story_abort:
+ mes "[Kfahr the Warrior]";
+ mes "Kfahr frowns.";
+ mes "\"I only just told you that story. Trust me, the others are worth hearing, too!\"";
+ next;
+ set @story_abort, 1;
+ return;
+
+L_out_of_beer_abort:
+ mes "[Kfahr the Warrior]";
+ if (@beer_count > 4)
+ mes "\"I think I've talked 'nuff for now... but thanks for lis'ning!\"";
+ if (@beer_count <= 4)
+ mes "\"Now that's one of my favorite tales, but my throat is just a little too dry to talk about something like that... could you help me out a little here?\"";
+ next;
+ set @story_abort, 1;
+ return;
+
+L_real_main_menu:
+ if (@Q_needs_stinger)
+ goto L_long_main_menu;
+
+ menu "What's a Desert Worm?", L_tale_desert_worm,
+ "Desert Temple?", L_tale_desert_temple,
+ "Hero of Tulimshar?", L_tale_hero_tulimshar,
+ "Tell me about the desert!", L_tale_desert,
+ "I want to become as powerful as you!", L_gain_power,
+ "Here, have a beer!", L_give_beer,
+ "Goodbye!", L_end;
+
+ close;
+
+L_long_main_menu:
+
+ menu "What's a Desert Worm?", L_tale_desert_worm,
+ "Desert Temple?", L_tale_desert_temple,
+ "Hero of Tulimshar?", L_tale_hero_tulimshar,
+ "Tell me about the desert!", L_tale_desert,
+ "I want to become as powerful as you!", L_gain_power,
+ "Have you fought any Golden Scorpions?", L_golden_scorpion,
+ "Here, have a beer!", L_give_beer,
+ "Goodbye!", L_end;
+
+ close;
+
+L_tale_desert_worm:
+ set @current_story, 1;
+ callsub L_tale_sub;
+ if (@story_abort) goto L_main_menu;
+
+ mes "[Kfahr the Warrior]";
+ mes "Kfahr smiles and leans back.";
+ mes "\"A desert worm is probably the largest creature you will ever see, larger even than most dragons. It spans a good twenty chains (or six box tosses if you're used to the Imperial system) in length, has a thick, rubbery skin, and teeth as long as my legs.\"";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"Most are a darkish gray, except for the young ones; those are more purplish, I've been told. Well, anyway, you hardly ever see one of them in their entirety, you only see the head, if they decide to come out and fight-- they tend to burrow under the ground.\"";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"They are terrifying beasts, but lack any intelligent thought whatsoever. They just eat whatever gets in their way. There's nothing out there that can kill one, I think, and they can grow hundreds of years old.\"";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"Fortunately, they're kind of rare these days, and mostly roam in the empty deserts far, far south of Tulimshar. They don't like the area too close to the mountains, I think; probably too rocky underground.\"";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "Kfahr takes a sip from his beer.";
+ mes "\"Anyway. Desert worms are dangerous, as I said, but there was one particularly terrifying one, called Toby Rick. You must've heard of it-- the greatest and most dangerous worm, scourge of the trade routes. It could smell humans from miles away.\"";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"Most desert worms don't smell or see or feel much, you see. They just notice when something's walking nearby, then jump up and swallow it. But Toby Rick was different. He was a terrifying beast, three times as long as a regular worm.\"";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"So to feed itself, it had learned to smell. That's right, the beast had grown nostrils and learned how to use 'em!\"";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"One day I was hired to protect a caravan going north to Tulimshar, with a friend of mine, old Arvek. He only came along for the fun, of course; it's not as if I really need much help defending a caravan... or at least normally it isn't.\"";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"Arvek's fun to have about. His manners are as bad as his breath, but he knows how to make a laugh out of everything. One thing you musnt't ever do with him, though, and that is to try his `homebrew'-- some kind of ale he makes out of maggot slime...\"";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "Kfahr takes another sip of beer, momentarily irritated as if surprised by the taste.";
+ mes "\"Anyway, This time was different. We were barely three days out in the desert, when we spotted him-- `the Black Worm!', the Caravan Master cried, `Over there; it will kill us all!'\"";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"I had barely enough time to draw out my sword, and the beast was upon us! The caravan people were fleeing for their lives, so it was up to me and Arvek to stop it.\"";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"That was madness, of course; no-one takes on a desert worm, if they have a choice. But we didn't; you see, with most desert worms you can just stand still and it won't notice you and pass by. But not with this one!\"";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "Kfahr leans forward.";
+ mes "\"So this humongous beast came roaring towards us, a big back hole where the mouth is, spiky fins sticking out to the side, all ready to swallow us all! My sword felt like a toothpick against that monster!\"";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "He pauses, then leans back a little to take another long sip from his beer.";
+ mes "\"So it seemed that our last hour was at hand, that we'd be swallowed and never heard from again!\"";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"Aha, but Kfahr doesn't die quite so easily. What happened was this: Me and Arvek charged towards that thing, slashing and stabbing, but our blows would just glance off. The beast roared and just slid by us, slapping us to the side with its fins like maggots, knocking us to the ground.\"";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"It bolted up into the air, and tore down on the caravan, swallowing each and everyone in there in a single big gulp!\"";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"Then it turned around towards us. Those fins had hit us pretty badly; I had lost my shield and Arvek his backpack. Better for him, I suppose, but I had been rather fond of that shield-- not that it would have helped me much here...\"";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "Kfahr leans foward again, nearly knocking over his beer.";
+ mes "\"So the beast charges at the two of us again and we dodge-- Arvek left, me right. The beast is smarter than the average desert worm, though, and had expected that-- so it bends to the side and swallows poor Arvek, hair and hide and all.\"";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "Kfahr's eyes sparkle with excitement.";
+ mes "\"It turns around, trying to get me too. I dodge it-- left, then the same again, I dodge it right. But it can't go on like that, the beast isn't tiring, but I am...\"";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"So for one instant I think that this might be it, that I might die out here! A worthy death, I suppose, against the king of desert worms! And just as I think that, I bump against something\"";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "Kfahr slaps on the table.";
+ mes "\"Arvek's backpack! Doesn't sound terribly exciting, of course-- what am I going to do, toss it at the beast and hope that it chokes on it?\"";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "He grins.";
+ mes "\"But I remember something better. That beast had grown nostrils, right? So it can smell and taste! So I tear open his backpack and pull out that big snakeskin of that disgusting maggot ale of his. It's still filled to the brim.\"";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"I quickly put on my gloves again, because I don't want to touch that stuff with my bare skin. The beast is almost upon me, but I have only that one chance-- so I squeeze the skin while sticking my thumb into the opening, until I can see the black of its nostrils...\"";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"...and when I think it's almost too late already, I shoot out that revolting brew at the beast's smelling holes, and I hit! Two at once, and up and sideways it rolls, away from me, and roaring and bellowing in pain!\"";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"It roared for a good five minutes, then convulsed... and first it spat out old Arvek, who was a bit irritated at all that because, as he told me, he had `almost pierced the pancreas', whatever that means...\"";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"Next it spat out the caravan, and then some other caravan it had plucked off from elswehere. Somehow, everyone from there was still alive, too.\"";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"Then it slid away from us, away to the north, but we could see it getting slower and slower.\"";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"Two days later we caught up with it, but it was already dead then and had started to smell. We looked around and inside of it, found treasures and remnants of some less fortunate caravans and split them up appropriately.\"";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"(I never told Arvek that it was his brew that killed it; he'd never have forgiven me.)\"";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"One of the nomads that had been travelling with the other caravan then told me that you could make special kinds of knives and swords and armor out of desert worm bones.\"";
+ next;
+
+ menu "Hang on... bones in a... worm?", L_worm_bones,
+ "That's neat! Do you have any that I could see?", L_worm_see_bones,
+ "And then?", L_worm_final,
+ "Zzzzzzzz.......", L_end;
+
+L_worm_final:
+ mes "[Kfahr the Warrior]";
+ mes "\"Nothing much else happened on that trip. When we arrived in Tulimshar, people at first didn't believe the story, of course, until we showed them the treasures and the bones. Ah, those were wonderful days...\"";
+ mes "He sighs and leans back, a nostalgic look on his face.";
+ next;
+
+ goto L_main_menu;
+
+L_worm_bones:
+ mes "[Kfahr the Warrior]";
+ mes "\"Weren't you listening? A desert worm is not a regular worm; a worm couldn't survive in the desert.\"";
+ next;
+
+ menu "Do you have any bones that I could see?", L_worm_see_bones,
+ "Never mind that, what happened then?", L_worm_final,
+ "Zzzzzzzz.......", L_end;
+
+L_worm_see_bones:
+ if (@Q_status == @QS_KNIFE_QUEST)
+ goto L_boneknife_quest_ip;
+
+ if (@Q_status > @QS_KNIFE_QUEST)
+ goto L_worm_continue2;
+
+ if (baselevel >= 40)
+ goto L_boneknife_quest;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"Of course!\"";
+ mes "He pulls out a strangely curved knife with a yellow-whiteish blade that is almost transparent at the edge.";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"When hardened properly, this bone knife can last a lifetime! One of the best knives you will find, too.\"";
+ mes "He puts the knife back into his pocket.";
+ next;
+
+ goto L_main_menu;
+
+
+L_worm_continue2:
+ mes "[Kfahr the Warrior]";
+ mes "Kfahr laughs.";
+ mes "\"Just have a look at the knife I gave you if you don't believe me!\"";
+ next;
+
+ goto L_main_menu;
+
+L_tale_desert_temple:
+ set @current_story, 2;
+ callsub L_tale_sub;
+ if (@story_abort) goto L_main_menu;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"Ah, that...\"";
+ mes "Kfahr leans back and takes a sip from his beer.";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"That was many years ago, when George and I were just kids. George later became a pirate, you see; he always loved hunting for treasure. But back in those days it was all on level ground.\"";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"George had found a treasure map somewhere... and when I say `found', I mean that in a fairly liberal sense; he always loved those maps, almost as much as the excitement of hunting for treasure.\"";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"Anyway, that map pointed to a spot in the desert a good day's walk south of Tulimshar. So we grabbed our satchels and coats and packed food and water, and headed there in the evening.\"";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"We walked all night. As you know, it's best not to travel during the day if you can avoid it, and we were young and energetic in those days, so that was easily avoided.\"";
+ mes "He sighs and takes another sip.";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"Anyway, when the sun rose in the morning, we still hadn't found the place. So we climbed up on the nearest dune and looked all around to find it.\"";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"But there was nothing, nothing at all. We looked and looked-- and suddenly George screamed: While we weren't paying attention to nearby things, scorpions had crept up on us!\"";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"The scorpions had smelled the food we had brought and cut open our satchels, tearing our waterskins and making a mess of our food-- and now that they were done with that, they were coming for us!\"";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"We didn't have any suitable weapons, and not much of a choice either, so we made a break for it. We ran into the desert, fast as our legs would carry us, and the scorpions after us.\"";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"We very nearly didn't make it. There was nothing around but sand, and we had no water, no food-- at least we'd had our breakfast already-- and the sun kept burning, and burning, and trying to cook us alive.\"";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"We had long lost the scorpions, but we were dry like parchment, and exhausted from all the sun and running. So we sat down in the shades of a dune and contemplated our options.\"";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"Without water we couldn't last during the day. So our only hope was to find shelter somewhere-- except that the only thing around was sand, and the mid-day sun would rob that of all shelter.\"";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"So we resigned to continuing to search for something, anything-- it was either that, or die of thirst for sure. The only problem was that we were already so thirsty and it was so bright that we couldn't see nor walk straight anymore.\"";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"So we had barely made it to the top of the next dune when George slipped and rolled down the other side. I wanted to catch him, but I was too dizzy myself, and so I rolled after him.\"";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"We seemed to roll down for hours, and I kept feeling dizzier and dizzier; I didn't have the strength to stop. When we arrived at the bottom, I just wanted to lie down and let the sun dry me up.\"";
+ mes "Kfahr takes a deep sip of beer. \"Aaah.\"";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"I was being foolish, of course. You should never give up, no matter how hopeless the situation may seem. Anyway, I finally did decide to get up on my knees and look around again...\"";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"...and what I saw right before me, believe it or not, was a giant face of a man, carved into rock-- there, in the middle of the desert, half-sunk, a shattered visage!\"";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"I pulled George up-- I didn't have the strength to speak, but walking seemed to work-- and we slowly made our way over to it. We weren't thinking much, just trying to find some shade, so we climbed into that thing's ear.\"";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"Inside it felt moist, as if it was a real ear-- not that I've climbed inside a real ear, mind you! But that feeling of cool and dampness and water was like a magical healing potion; we suddenly felt strength in our legs again.\"";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"When we looked aorund, we noticed that there was a passage leading further underground, and long-spent torches on the wall. Fortunately I still had my tinderbox, so I wrapped my shirt around a torch and lighted it.\"";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"We climbed down, and soon we heard the dripping of water-- we had found an underground water-hole! More than that, we had found a gigantic underground cave, and, at the end of it, a huge portal.\"";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"We first drenched ourselves in water-- somehow managing not to douse the torch-- and drank until we were ready to burst. When we had rested, we went to the portal to have a closer look.\"";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"The portal was made out of bronze, or some similar metal, with images of snakes engraved all over. Curious as we were, we pulled the door open-- it wasn't locked or barred in any way-- and had a look inside.\"";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"The passages in there were cool and dark, with a ceiling high enough to swallow the light of my torch. There were snakes, quite a few of them, but we were both quick-footed and managed to avoid them.\"";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"There were chambers and inscriptions and more torches, but not a living being besides us and the snakes. Hmm. Though I could have sworn that some of the statues there were following us with their eyes...\"";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"All went well, until George stepped into a trap. A piece of ground just caved in, and if I hadn't grabbed his hand at the last second, he would have ended up on some rusty and probably poisoned spikes on the bottom...\"";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"But I moved too fast, and slipped, and let go of the torch to catch myself with the other hand-- and the torch ended up in the bottom of the pit! Well, better the torch than George, I suppose...\"";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"Still, we no longer had any light. Being careless, I had gotten my tinderbox wet while we were at the water-hole, so we couldn't make another torch either.\"";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"We had the choice between staying by our torch and watching it die, and then follow suit at the hands, or, well, fangs of the snakes, or wandering off in the dark, to be eaten by snakes someplace else.\"";
+ mes "Kfahr empties his beer, looking a bit disappointed.";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"Anyway, we took the latter option. We wandered through the dark, somehow barely avoiding the snakes and the traps, running into walls and hitting our heads on archways, until, suddenly, we saw something shining up ahead.\"";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"That thing was on some kind of pedestal, and it looked like a golden tablet of sorts. We clambered towards it-- the only source of light in here, the only thing that could save us-- and hesitated.\"";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"Should we just take it? This was clearly some kind of temple, so it might be something sacred. George and I argued about it for a while, until I decided to end the discussion-- so I simply grabbed it: we needed light.\"";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"At that point, a terrible grinding noise started all around us, as the pedestal began to sink into the ground. We had triggered some ancient trap!\"";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"Holes on the walls were opening up, and snakes began to gush out-- only now did we realise that we were in a huge, opulent chamber, with gold and gems and images all around! But now it was too late for any looting; we had to run for our lives!\"";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"So we ran from that slithering mass, faster than we ever had! We had no idea where we were going of course, but at least we had light again...\"";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"Somehow we got lucky, somehow we escaped. It was evening again when we climbed out of that ear into the desert again, with only our lives and that golden tablet. We only barely made it back to Tulimshar in the morning.\"";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"But we did have the tablet as a proof of what happened.\"";
+ mes "He grins.";
+ mes "\"That was my first real adventure, I think. Ah, those were exciting days.\"";
+ next;
+
+ menu "Wow.", -,
+ "What happened to the tablet?", L_tale_tablet,
+ "Did you go there again?", L_tale_temple_again,
+ "Zzzzzzz.....", L_end;
+
+ goto L_main_menu;
+
+L_tale_tablet:
+
+ mes "[Kfahr the Warrior]";
+ mes "\"Well, we couldn't read it. We later sold it for a good price, to a young travelling archeologist, Doctor Nohlidge or something like that. She said that the engravings described sacrifical practices of an ancient snake cult...\"";
+ mes "He shrugs.";
+ next;
+ goto L_main_menu;
+
+L_tale_temple_again:
+
+ mes "[Kfahr the Warrior]";
+ mes "Kfahr laughs.";
+ mes "\"Of course we tried to go there again. After seeing all that treasure, George wouldn't give up on it. We tried many times-- as did others, from what I've heard-- but we never found it again.\"";
+ next;
+ goto L_main_menu;
+
+L_tale_hero_tulimshar:
+ set @current_story, 3;
+ callsub L_tale_sub;
+ if (@story_abort) goto L_main_menu;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"Yes, Hero of Tulimshar. That was many years";
+ mes "ago, but I did save the city of Tulimshar from a deadly drought.\"";
+ mes "He grins broadly.";
+ mes "\"And quite a feat that was, let me tell you!\"";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"Back in those days, there wasn't much trade with Hurnscald, and Tulimshar was dependent on its own water supply-- critically dependent, even.\"";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"Now, one day the water people drew from the wells started smelling. The smell was nauseating, and people who drank from it became violently sick.\"";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"So the entire town was without water, except for the water reserves in the cistern. Someone had to act quickly-- and of course that someone was me.\"";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"With nothing more than a torch, some light armor and a sword, I climbed down one of the wells. It was a long climb; the wells go down fairly deep.\"";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"I noticed that there were some holes in the walls of the wells, with hollow spaces on the sides... Hmm, that reminds me that I still have to check whether the rumors of a labyrinth underneath Tulimshar are true.\"";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"Anyway, it took me a long time to get down, and every minute the stench was getting worse-- something really bad was down there. I had to stop and tie a wet piece of cloth over my mouth so that I wouldn't inhale all of that nasty stuff.\"";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"My torch was in an even poorer shape-- whatever was making that smell had killed the flame, so I soon had to rely on the light from above to see anything.\"";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"Finally I arrived at the water level. All Tulimshar wells dip into the same underground lake, which is on the side of a huge underground cavern. And in the midst of that cavern lay-- hardly visible through the greenish mist coming from it-- a Stinkewyrm!\"";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"Stinkewyrms are smaller cousins of dragons, but just as dangerous. They have a green, sticky skin, and, well, they stink. A lot. This one was particularly bad-- it had filled up the entire cave with stinkiness!\"";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"I climbed down and swam to the shore. The stench was terrible; I had to hold my breath to get closer to the monster. There it was, lying on the ground, snoring, poisoning all our water! So I tried to wake it up to scare it away.\"";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"I kicked it. I yelled at it. (Bad mistake, I got some of that stinky stuff in my lungs.) I poked at it with my sword. I even tried to poke it in the eyes, but I couldn't get that close to its mouth-- that was where most of the smell was coming from.\"";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"After a few attempts I couldn't take it anymore, so I had myself be pulled up again. It took me a while to recover and to tell the tale. We talked about what could be done, but no-one had an idea.\"";
+ mes "Kfahr takes a deep sip from his beer.";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"Finally, I came up with something. Stinkewyrms love that terrible stench of theirs, so what should be their natural enemy? Why, soap, of course!\"";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"We couldn't just dump all the soap into the underground lake, of course; the water would be undrinkable again. So we collected some of the soap, and I climbed down again with it.\"";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"Having arrived at the bottom, I cut off the biggest of the water buckets and filled it with water-- and that was a really big one, I could hardly carry it when it was full. Then I dissolved most the soap, and poured that onto the Stinkewyrm's head.\"";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "Kfahr laughs.";
+ mes "\"Ah, that caught its attention! You should have seen that dragon roar, as it jumped to its feet and tried to find out who had soaped it! I rushed back to the water and made another bucket of soap water.\"";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"But it had noticed me! And as soon as it had realized where I was, it came after me. Then it stopped, towering right before me, its stench nearly killing me, and grinned that broad, crooked-teeth dragon smile of its kind.\"";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"Then it took a deep breath-- and I realised that that was probably `it' for me; Stinkewyrms can breathe fire like real dragons, and I didn't have the time to run back to the water.\"";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"But when it breathed out, only a tiny little flame came out-- and a lot of terrible smell that nearly knocked me off my feet.\"";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"For you see, it had generated so much of the deadly smell around itself that even its own fire breath couldn't survive!\"";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"So it stared at me, wide agape-- the perfect opening!\"";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"I stormed at it and before it could even blink, it had a huge load of bubbly soap water down its throat.\"";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"You should have heard the coughing and shaking! I swear, I thought the roof would collapse as it was jumping and choking...\"";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"Bubbles were coming out of its mouth, its nostrils, even its ears! The poor wyrm must have never felt so clean in its life!\"";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"I was out of soap, but the beast didn't know that-- so I quickly grabbed another bucket and charged it again.\"";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"And it worked! Seeing me like this again, it ran, squealing, back into the underground caves from where it must have come.\"";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "Kfahr roars with laughter and slaps his hands on the table.";
+ mes "\"So we defeated it with hygiene! Ah, that was wonderful. After a day, the stench had worn off enough that we could drink the water again, and a week later it was almost completely gone. And of course I was the hero of the day.\"";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "Kfahr downs the rest of his beer.";
+ mes "\"And from that day on they called me the `Hero of Tulimshar'.\"";
+ next;
+
+ goto L_main_menu;
+
+L_tale_desert:
+ set @current_story, 4;
+ callsub L_tale_sub;
+ if (@story_abort) goto L_main_menu;
+
+ mes "[Kfahr the Warrior]";
+ mes "Kfahr leans back, trying to find the right words to describe the desert.";
+ mes "\"The desert... a cold and lonely place at night, and a hot and lonely place during the day.\"";
+ mes "For someone who apparently spent most of his life in the desert, his insights sometimes seem less than profound.";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"The desert is a living hell during some times of the year. Filled with black scorpions and snakes, except for the shadier areas, and mountain snakes if you go further east.\"";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"South of Tulimshar is a fairly protected region; the nomads keep the snakes out of there and you'll find only relatively harmless monsters. But go west from there, to the beach, and it's scorpions and snakes...\"";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"...and east of there you find the old Hatmaker cave, now filled to the brim with snakes! Rumors have it that this was once an oasis, in centuries long gone by, but as far as I'm concerned that pit is just a dump that you best avoid.\"";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"Go further to the east and you'll find ol' Pachua up on the mountain. He seems to have some kind of power over the mountain snakes there; they never attack him. I think he's a bit creepy, personally...\"";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"...but if he offers you some of his tobacco, then by all means give it a try! That stuff is amazing.\"";
+ mes "He laughs, then begins to cough.";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"Not terribly healthy, though, I s'pose...\"";
+ next;
+
+ goto L_main_menu;
+
+L_gain_power:
+ if ((@beer_count - @has_beer) < 1)
+ goto L_listen_to_a_story_first;
+
+ if (@Q_status < @QS_KNIFE_QUEST)
+ goto L_boneknife_quest;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"Yeees, yes... doesn't everyone?\"";
+ mes "He laughs briefly.";
+ mes "\"Don't worry-- you can't become as powerful as I, of course, but if you keep practicing, you can get pretty damn close! Just make sure to pick your opponents carefully, and know when to run to live another day!\"";
+ next;
+
+ goto L_main_menu;
+
+L_listen_to_a_story_first:
+ mes "[Kfahr the Warrior]";
+ mes "\"That's the spirit! Perhaps you better listen to one of my tales, then!\"";
+ next;
+ goto L_main_menu;
+
+L_boneknife_quest:
+ if (@Q_status == @QS_KNIFE_QUEST)
+ goto L_boneknife_quest_ip;
+
+ if (@Q_status > @QS_KNIFE_QUEST)
+ goto L_boneknife_quest_completed;
+
+ if (baselevel < 40)
+ goto L_boneknife_quest_tooweak;
+
+ mes "[Kfahr the Warrior]";
+ mes "Kfahr stares at you for a moment, then nods.";
+ mes "\"You seem reasonably skilled. I think I may have something that I no longer need, but I don't want to give it to just anyone...\"";
+ mes "He hesitates, obviously trying to make up his mind about something, then continues.";
+
+ set @Q_status, @QS_KNIFE_QUEST;
+ callsub L_Update_Var;
+ next;
+
+L_boneknife_quest_ip:
+ mes "[Kfahr the Warrior]";
+ mes "\"Bring me " + @BLACK_STINGERS_NR + " black scorpion stingers and " + @MUSHROOMS_NR + " small mushrooms to prove that you are a competent warrior, and I'll see if I have something for you.\"";
+ mes "He grins.";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"But while you are here... perhaps you would like to listen to another story?\"";
+ next;
+
+ goto L_main_menu;
+
+L_boneknife_quest_completed:
+ mes "[Kfahr the Warrior]";
+ mes "\"I really don't have anything else I'd want to give away to make you stronger. Look around a bit yourself! You won't become a hero if you keep begging for help!\"";
+ next;
+ goto L_main_menu;
+
+L_boneknife_quest_tooweak:
+ mes "[Kfahr the Warrior]";
+ mes "\"You know, little one, if you keep practicing a little and come back once you're a bit stronger, I might have something for you...\"";
+ mes "He winks.";
+ next;
+ goto L_main_menu;
+
+
+L_knife_quest_check:
+ mes "[Kfahr the Warrior]";
+ mes "Kfahr eyes you with unconcealed amusement.";
+ mes "\"Welcome back! Did you bring me the things I asked for?\"";
+ next;
+
+ menu "Yes, here they are!", L_knife_quest_completecheck,
+ "Er, what were those things again?", L_boneknife_quest_ip,
+ "No, sorry, I didn't have the time.", L_main_menu,
+ "I forgot! Let me get them right now.", L_end;
+ close;
+
+L_knife_quest_completecheck:
+ if (countitem(@BLACK_STINGER) < @BLACK_STINGERS_NR)
+ goto L_knife_quest_missing_stingers;
+
+ if (countitem(@MUSHROOM) < @MUSHROOMS_NR)
+ goto L_knife_quest_missing_mushrooms;
+
+
+ mes "[Kfahr the Warrior]";
+ mes "Kfahr is delighted.";
+ mes "\"Well done, well done! Now that's what I call Warrior spirit!\"";
+ mes "He laughs, then suddenly stops, turning to you with suspicion in his eyes.";
+ mes "\"You DID get those yourself, didn't you? Not buy them or somesuch...?\"";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "Before you can answer, he laughs and slaps you on the back again.";
+ mes "\"Ah, what am I thinking! Too many years in the desert make you a little suspicious of everyone and everything! Naah, I believe you.\"";
+ mes "He pulls a strangely curved knife out of a side pocket and holds it up to the light. The blade is partly transparent, and looks quite sharp.";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"It's a bone knife, carved out of the umplex bone of a desert worm... you can probably guess which one.\"";
+ mes "He grins broadly again, weighing the weapon.";
+ mes "\"It's a little heavy, but one of the best knives you can get. Certainly beats a short sword any time of day.\"";
+ mes "I had the nomads make me a few of them, and I hardly use them nowadays, so I think I can part with this one.";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "He hands you the knife.";
+ mes "\"Oh, and I think I'll keep those in return; I know someone who will trade them for antidote potions.\"";
+ mes "He pockets the stingers and mushrooms.";
+ mes "[" + @KNIFE_QUEST_XP + " experience points]";
+ next;
+
+ set @Q_status, @QS_KNIFE_QUEST_DONE;
+ callsub L_Update_Var;
+
+ delitem @BLACK_STINGER, @BLACK_STINGERS_NR;
+ delitem @MUSHROOM, @MUSHROOMS_NR;
+ getexp @KNIFE_QUEST_XP, 0;
+ getitem @BONE_KNIFE, 1;
+
+
+ goto L_main_menu;
+
+L_knife_quest_missing_stingers:
+ mes "[Kfahr the Warrior]";
+ mes "\"No, no... I said " + @BLACK_STINGERS_NR + " black scorpion stingers.";
+ if (countitem(@BLACK_STINGER))
+ mes "You will need " + (@BLACK_STINGERS_NR - (countitem (@BLACK_STINGER))) + " more of those.\"";
+ if (countitem(@BLACK_STINGER) == 0)
+ mes "You didn't bring even a single one!\"";
+ next;
+ close;
+
+L_knife_quest_missing_mushrooms:
+ mes "[Kfahr the Warrior]";
+ mes "\"No, no... I said " + @MUSHROOMS_NR + " small mushrooms.";
+ if (countitem(@MUSHROOM))
+ mes "You will need " + (@MUSHROOMS_NR - (countitem (@MUSHROOM))) + " more of those.\"";
+ if (countitem(@MUSHROOM) == 0)
+ mes "You didn't bring me even a single little mushroom!\"";
+ next;
+ close;
+
+L_stinger_quest_check:
+ mes "[Kfahr the Warrior]";
+ mes "Kfahr grins at you.";
+ mes "\"Welcome, welcome! Did you bring me my snake skins?\"";
+ next;
+
+ menu "Yes, here they are!", L_snakeskins_completecheck,
+ "No, sorry, I didn't have the time.", L_main_menu,
+ "I forgot! Let me get them right now.", L_end;
+ close;
+
+
+L_snakeskins_completecheck:
+ if (countitem(@SNAKE_SKIN) < @SNAKE_SKINS_NR)
+ goto L_snakeskins_missing;
+
+ delitem @SNAKE_SKIN, @SNAKE_SKINS_NR;
+ getitem @GOLDEN_STINGER, 1;
+
+ set @Q_status, @QS_STINGER_QUEST_DONE;
+ callsub L_Update_Var;
+
+ getexp @STINGER_QUEST_XP, 0;
+
+ mes "[Kfahr the Warrior]";
+ mes "Kfahr takes the skins and pulls a golden scorpion stinger out of his pocket.";
+ mes "\"Well, you've earned it. But be careful-- the poison in there is still lethal, after all those years.\"";
+ mes "He hands you the scorpion stinger.";
+ mes "[" + @STINGER_QUEST_XP + " experience points]";
+ next;
+ goto L_main_menu;
+
+L_snakeskins_missing:
+ mes "[Kfahr the Warrior]";
+ mes "\"No, no... I said " + @SNAKE_SKINS_NR + " snake skins.";
+ if (countitem(@SNAKE_SKIN))
+ mes "You will need " + (@SNAKE_SKINS_NR - (countitem (@SNAKE_SKIN))) + " more of those.\"";
+ if (countitem(@SNAKE_SKIN) == 0)
+ mes "You didn't bring even a single skin!\"";
+ next;
+ close;
+
+
+L_give_beer:
+ if (countitem(@BEER) < 1)
+ goto L_player_out_of_beer;
+
+ if (@has_beer)
+ goto L_enough_beer_for_now;
+
+ if @beer_count > 4
+ goto L_too_much_beer;
+
+ setarray @beermessages$,
+ "Ah yes... a warrior's drink!",
+ "Generous, generous! I like that!",
+ "Hahah! That's just what I needed!",
+ "I love this town! Hurnscaldian hospitality! Mrahahahah!",
+ "A'ight, one more can't hurt, eh?";
+
+ set @mesg$, @beermessages$[@beer_count];
+
+ delitem @BEER, 1;
+
+ set @has_beer, 1;
+ set @beer_count, @beer_count + 1;
+
+ mes "[Kfahr the Warrior]";
+ mes "Kfahr is visibly delighted.";
+ mes "\"" + @mesg$ + "\"";
+ mes "He takes a deep sip.";
+ mes "\"Aaah, magnificent!\"";
+
+ if (@beer_count > 4)
+ mes "Kfahr seems quite relaxed now.";
+
+ next;
+
+ goto L_main_menu;
+
+L_enough_beer_for_now:
+ mes "[Kfahr the Warrior]";
+ mes "\"Generous, generous! But I still have plenty in here!\"";
+ mes "He laughs and takes a sip from the beer you gave him earlier.";
+ next;
+ goto L_main_menu;
+
+L_too_much_beer:
+ mes "[Kfahr the Warrior]";
+ mes "Kfahr leans back and sighs heavily.";
+ mes "\"Very, very generous... bu' I think I'm fine for now.\"";
+ mes "He suppresses a burp.";
+ next;
+ goto L_main_menu;
+
+L_player_out_of_beer:
+ mes "[Kfahr the Warrior]";
+ mes "Kfahr stares at you, then begins to laugh.";
+ mes "\"Mrahahahahaha! Here's the beer! Right, right! Naah, I get it! Save your gold for whatever you need it for! But if you have some spare and want to share a beer, you know where to find me!\"";
+ next;
+ goto L_main_menu;
+
+L_golden_scorpion:
+ if (@Q_status > @QS_STINGER_QUEST)
+ goto L_golden_scorpion_over_ask;
+
+ if (@Q_status == @QS_STINGER_QUEST)
+ goto L_golden_scorpion_ask_again;
+
+ if (@Q_status == @QS_LOST_WRESTLING)
+ goto L_golden_scorpion_wrestle_again;
+
+ mes "[Kfahr the Warrior]";
+ mes "He grins.";
+ mes "\"Fought any? I single-handedly raided a nest of those beasts! Ah, but golden scorpions are almost unheard of in these parts. Why do you ask?\"";
+ next;
+
+ menu "Never mind, I was just curious.", L_main_menu,
+ "I need a golden scorpion stinger.", -;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"A golden scorpion stinger? Those are rare and valuable, I hope that you know that!\"";
+
+ if (baselevel < 60)
+ goto L_too_lowlevel_for_stinger;
+
+ if (@Q_status < @QS_KNIFE_QUEST)
+ goto L_golden_requires_knife_quest;
+
+ if (@Q_status < @QS_KNIFE_QUEST_DONE)
+ goto L_golden_requires_knife_quest_done;
+
+ mes "\"Still, you are a warrior of repute. I'll consider giving it to you...\"";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "A mischievous sparkle lightens up in his eyes.";
+ mes "\"...if you arm-wrestle me for it!\"";
+ next;
+
+L_golden_scorpion_wrestle_intro:
+
+ menu "Never!", L_main_menu,
+ "Wait... what?", L_wrestle_explain,
+ "Bring it on!", L_golden_scorpion_wrestle;
+ close;
+
+L_golden_requires_knife_quest_done:
+ mes "He hesitates.";
+ mes "\"But no, this is too valuable. Perhaps if you finish that other quest I gave you...?\".";
+ next;
+ goto L_main_menu;
+
+L_golden_requires_knife_quest:
+ mes "He hesitates.";
+ mes "\"But no, this is too valuable. I think I should have you prove your worthiness with another quest first...\"";
+ next;
+ goto L_boneknife_quest;
+
+L_wrestle_explain:
+ mes "[Kfahr the Warrior]";
+ mes "\"Arm wrestling! Arm against arm! And whoever is stronger wins! If you manage to defeat me, I'll give you a little quest for the stinger. How about it?\"";
+ next;
+ goto L_golden_scorpion_wrestle_intro;
+
+L_too_lowlevel_for_stinger:
+ mes "\"Well, I have one, but I can't just give it to anyone. Maybe if you train a little and become a worthy warrior I will consider giving it away...\"";
+ next;
+ goto L_main_menu;
+
+L_golden_scorpion_over_ask:
+ mes "[Kfahr the Warrior]";
+ mes "\"Is this about the stingers again? I already gave you a golden stinger, I'm not going to part with any more.\"";
+ next;
+ goto L_main_menu;
+
+L_golden_scorpion_ask_again:
+ mes "[Kfahr the Warrior]";
+ mes "\"This is about the stinger again, right? Well, just bring me " + @SNAKE_SKINS_NR + " snake skins, and you can have one.\"";
+ next;
+ goto L_main_menu;
+
+L_golden_scorpion_wrestle_again:
+ mes "[Kfahr the Warrior]";
+ mes "\"This is about the stinger again, eh? So you want to give it another try?\"";
+ mes "He grins broadly.";
+ next;
+ goto L_golden_scorpion_wrestle;
+
+L_golden_scorpion_wrestle:
+ mes "[Kfahr the Warrior]";
+ mes "You sit down. Both of you place your arms on the table, on opposing sides, and grab each other's hands.";
+ next;
+
+ set @KFAHR_STR, 70 + @beer_count * 6;
+ set @KFAHR_AGI, 60 - @beer_count * 5;
+ set @kfahr_stamina, 120;
+
+ set @PC_STR, readparam(bStr);
+ set @PC_AGI, readparam(bAgi);
+ set @PC_MAX_STAMINA, readparam(bVit) + 20;
+ set @pc_stamina, @PC_MAX_STAMINA;
+
+ setarray @positions$,
+ "Kfahr's hand is almost on the table.",
+ "Kfahr's hand is pushed back.",
+ "Kfahr and your hands are centered.",
+ "Your hand is pushed back.",
+ "Your hand is almost on the table.";
+
+ set @position, 2;
+ set @first_round, 1;
+
+L_wrestle_loop:
+ mes "[Arm-wrestling with Kfahr]";
+
+ mes @positions$[@position];
+
+ if ((@PC_STAMINA * 2 <= @PC_MAX_STAMINA) && (@PC_STAMINA * 4 > @PC_MAX_STAMINA))
+ mes "You feel a little exhausted.";
+ if (@PC_STAMINA * 4 <= @PC_MAX_STAMINA)
+ mes "You feel very exhausted.";
+ next;
+
+ menu "Push!", L_wrestle_push,
+ "Hold!", L_wrestle_hold,
+ "Slam!", L_wrestle_slam,
+ "Consider your options", L_wrestle_info;
+ close;
+
+L_wrestle_info:
+ mes "[Arm-wrestling with Kfahr]";
+ mes "Kfahr is a strong arm-wrestling opponent. Winning against him won't be easy.";
+ mes "Each round you have to choose an action; what you choose determines both your chances of moving each other's arms and how much weaker you get.";
+ next;
+ mes "[Arm-wrestling with Kfahr]";
+ mes "If you PUSH, you may be able to push him back, but if you fail, you will lose more stamina than if you had succeeded.";
+ next;
+ mes "[Arm-wrestling with Kfahr]";
+ mes "If you HOLD, you lose little stamina and may be able to hold him and drain his stength, but you cannot win just by holding.";
+ next;
+ mes "[Arm-wrestling with Kfahr]";
+ mes "If you SLAM, you try to move against him quickly-- if you are successful, you may push him back quite a bit, but losing this will drain you badly.";
+ next;
+ goto L_wrestle_loop;
+
+
+L_wrestle_push:
+ set @kfahr_def, @KFAHR_STR;
+ set @attack, @PC_STR;
+ set @cost_factor, 2;
+ callsub L_wrestle_attack;
+ if (@result < -1)
+ set @result, -1; // can't push back further than one
+ goto L_wrestle_next;
+
+L_wrestle_hold:
+ set @kfahr_def, @KFAHR_STR;
+ set @attack, @PC_STR;
+ set @cost_factor, 1;
+ callsub L_wrestle_attack;
+ if (@result < 0)
+ set @result, 0; // hold only
+ goto L_wrestle_next;
+
+L_wrestle_slam:
+ if (@beer_count == 5 && @first_round) goto L_quick_slam;
+ set @kfahr_def, @KFAHR_AGI;
+ set @attack, @PC_AGI;
+ set @cost_factor, 4;
+ callsub L_wrestle_attack;
+ goto L_wrestle_next;
+
+
+L_wrestle_attack:
+ set @kfahr_stamina_bonus, @kfahr_stamina;
+ set @pc_stamina_bonus, @kfahr_stamina;
+
+ if (@kfahr_stamina_bonus > 40)
+ set @kfahr_stamina_bonus, 40;
+
+ if (@pc_stamina_bonus > 40)
+ set @pc_stamina_bonus, 40;
+
+ set @score, @kfahr_def + @kfahr_stamina_bonus - @attack - @pc_stamina_bonus + rand(20) - rand(20);
+
+ set @result, @score / 10;
+
+ if (@result > 1)
+ set @result, 1;
+
+ if (@result > 0) set @kfahr_stamina, @kfahr_stamina - 12;
+ if (@result == 0) set @kfahr_stamina, @kfahr_stamina - 16;
+ if (@result < 0) set @kfahr_stamina, @kfahr_stamina - 8;
+
+ if (@result < 0) set @pc_stamina, @pc_stamina - (6 * @cost_factor);
+ if (@result == 0) set @pc_stamina, @pc_stamina - (8 * @cost_factor);
+ if (@result > 0) set @pc_stamina, @pc_stamina - (4 * @cost_factor);
+
+ if (@kfahr_stamina < 0)
+ set @kfahr_stamina, 0;
+
+ if (@kfahr_stamina < 0)
+ set @pc_stamina, 0;
+
+ return;
+
+L_wrestle_next:
+ set @first_round, 0;
+
+ mes "[Arm-wrestling with Kfahr]";
+ if (@result < 0) mes "You manage to push him back!";
+ if (@result == 0) mes "You hold your position!";
+ if (@result > 0) mes "Kfahr pushes you back!";
+ next;
+
+ set @position, @position + @result;
+ if (@position < 0) goto L_wrestle_win;
+ if (@position > 4) goto L_wrestle_lose;
+
+ goto L_wrestle_loop;
+
+L_wrestle_lose:
+ mes "[Arm-wrestling with Kfahr]";
+ mes "Kfahr slams your hand on the table.";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"Don't worry! It was a good attempt-- but beating Kfahr is not quite so easy!\"";
+ mes "He laughs and slaps you on the shoulder.";
+ mes "\"But come back any time you want to try again!\"";
+ next;
+
+ set @Q_status, @QS_LOST_WRESTLING;
+ callsub L_Update_Var;
+
+ goto L_main_menu;
+
+L_quick_slam:
+ mes "[Arm-wrestling with Kfahr]";
+ mes "Your hands have barely touched as you push against him with all your might. His reactions slowed by the beer, Kfahr doesn't stand a chance.";
+ next;
+ goto L_wrestle_win;
+
+L_wrestle_win:
+ mes "[Arm-wrestling with Kfahr]";
+ mes "You slam Kfahr's hand on the table.";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "Kfahr stares first at the hand, then at you, incredulously.";
+ mes "Then he begins to roar with laughter, slapping you on the shoulder.";
+ mes "\"Excellent, excellent! Caught me in a weak moment there, did ya!\"";
+ next;
+
+ mes "[Kfahr the Warrior]";
+ mes "After calming down, Kfahr outlines your quest.";
+ mes "\"As I promised, I will give you the stinger if you do something for me. Get me " + @SNAKE_SKINS_NR + " snake skins, and I'll let you have it.\"";
+ next;
+
+ set @Q_status, @QS_STINGER_QUEST;
+ callsub L_Update_Var;
+
+ goto L_main_menu;
+
+L_end:
+ close;
+
+L_Update_Var:
+ set QUEST_Forestbow_state,
+ (QUEST_Forestbow_state & ~(@Q_MASK)
+ | (@Q_status << @Q_SHIFT));
+ return;
+}
diff --git a/npc/new_20-1-woodland-village/misc.txt b/npc/new_20-1-woodland-village/misc.txt
new file mode 100644
index 00000000..bf3a6046
--- /dev/null
+++ b/npc/new_20-1-woodland-village/misc.txt
@@ -0,0 +1,11 @@
+//Note in bar
+
+new_20-1.gat,54,49,0 script Note 127, {
+ mes "[Note]";
+ mes "\"We refuse service to anyone who:\"";
+ mes "\"-Has a bubblehead\"";
+ mes "\"-Is not properly shaded\"";
+ mes "\"-Can't walk without stopping after every step\"";
+ close;
+ // In case you don't get the joke - it's a parody on Illutia.
+}
diff --git a/npc/new_20-1-woodland-village/nicholas.txt b/npc/new_20-1-woodland-village/nicholas.txt
new file mode 100644
index 00000000..4efa9200
--- /dev/null
+++ b/npc/new_20-1-woodland-village/nicholas.txt
@@ -0,0 +1,404 @@
+//#################################################################################
+//#
+//# Nicholas the Smith.
+//# Participates in iron ore smithery and the following quests:
+//# - Together with Pachua: Iron Shield quest (repeatable)
+//# (10 iron ores, 2 infantry helmets, 20000 GP, leather patch) -> iron shield
+//# - Primary participant in the Setzer quest (monster oil/golden stinger subquests)
+//#
+//# Variables used: @QUEST_Forestbow_state, nibble 3 (setzer quest)
+//# @QUEST_Forestbow_state, nibble 4 (iron shield quest)
+//#
+//#################################################################################
+
+new_20-1.gat,185,55,0 script Nicholas 135,{
+
+ set @IRON_ORE, 640;
+ set @INFANTRY, 638;
+ set @LEATHER_PATCH, 708;
+ set @SHORT_SWORD, 536;
+ set @MONSTER_OIL, 707;
+ set @SETZER, 571;
+ set @STEEL_SHIELD, 601;
+
+ set @SETZER_XP, 100000;
+ set @SHIELD_XP, 20000;
+
+ set @SHIELD_INITIAL, 0;
+ set @SHIELD_KNOWS_PATCH, 1; // knows that a leather patch is needed
+ set @SHIELD_COMPLETED, 2; // shield completed once
+
+ set @SETZER_INITIAL, 0;
+ set @SETZER_KNOWS_OIL, 1;
+ set @SETZER_KNOWS_STINGER, 2;
+ set @SETZER_FLAG_MADE_OIL, 4;
+ set @SETZER_FLAG_MADE_SETZER, 8;
+
+ set @Q_SETZER_MASK, NIBBLE_3_MASK;
+ set @Q_SETZER_SHIFT, NIBBLE_3_SHIFT;
+
+ set @Q_SHIELD_MASK, NIBBLE_4_MASK;
+ set @Q_SHIELD_SHIFT, NIBBLE_4_SHIFT;
+
+ set @Q_SETZER_status, (QUEST_Forestbow_state & @Q_SETZER_MASK) >> @Q_SETZER_SHIFT;
+ set @Q_SHIELD_status, (QUEST_Forestbow_state & @Q_SHIELD_MASK) >> @Q_SHIELD_SHIFT;
+
+ mes "[Nicholas]";
+ mes "\"Hello there,";
+ mes "I'm an expert blacksmith.";
+ mes "If you get me some Iron Ore";
+ mes "I could make you a very valuable shield";
+ mes "or helmet.\"";
+ next;
+ menu
+ "I have some Iron Ore!", L_Check,
+ "Where can I get this Iron Ore?", L_Info,
+ "I'm okay, thanks.", L_Pass;
+
+L_Check:
+ mes "[Nicholas]";
+ mes "\"Let me take at look at how much you have...\"";
+ next;
+ if(countitem(@IRON_ORE)<5) goto L_NoItem;
+ if(countitem(@IRON_ORE)<10) goto L_StageA;
+ if(countitem(@IRON_ORE)<15) goto L_StageB;
+ goto L_StageC;
+
+L_Info:
+ mes "[Nicholas]";
+ mes "\"You can find Iron Ore in mines.";
+ mes "It is quite hard to come by though.\"";
+ close;
+
+L_Pass:
+ mes "[Nicholas]";
+ mes "\"Oh, okay";
+ mes "Come back any time.\"";
+ close;
+
+L_StageA:
+ mes "[Nicholas]";
+ mes "\"That's just enough for me to make you";
+ mes "a winged Knight's Helmet.";
+ mes "But it'll cost you 10,000GP";
+ mes "and 5 lumps of Iron Ore.\"";
+ next;
+ goto L_main_menu;
+
+L_StageB:
+ mes "[Nicholas]";
+ mes "\"Ahh, with that much Iron Ore I can";
+ mes "make you one of two helmets,";
+ mes "for only 10,000GP, or I can";
+ mes "make you a shield, for 20,000GP.\"";
+ mes "";
+ mes "\"What would you like?\"";
+ next;
+ goto L_main_menu;
+
+L_StageC:
+ mes "[Nicholas]";
+ mes "\"Excellent, that's enough to make";
+ mes "three different types of helmet.";
+ mes "My fee is 10,000GP.";
+ mes "I can also make a shield, but that";
+ mes "that will cost you 20,000 GP.\"";
+ mes "";
+ mes "\"Which helmet or shield will it be?\"";
+ next;
+ goto L_main_menu;
+
+L_main_menu:
+
+ set @CHOICE_KNIGHT, 1;
+ set @CHOICE_CRUSADE, 2;
+ set @CHOICE_WARLORD, 3;
+ set @CHOICE_SHIELD, 4;
+ set @CHOICE_SETZER, 5;
+
+ setarray @choice$, "", "", "", "", "";
+ set @choices_nr, 0;
+ setarray @choice_idx, 0, 0, 0, 0, 0;
+
+ if (countitem(@SHORT_SWORD) < 1) goto L_main_menu_post_setzer;
+ set @choice$[@choices_nr], "Can you make my short sword better?";
+ set @choice_idx[@choices_nr], @CHOICE_SETZER;
+ set @choices_nr, 1 + @choices_nr;
+
+L_main_menu_post_setzer:
+
+ if (countitem(@IRON_ORE)<5) goto L_no_more_helmets;
+ set @choice$[@choices_nr], "Knight's Helmet. (5 Iron Ores)";
+ set @choice_idx[@choices_nr], @CHOICE_KNIGHT;
+ set @choices_nr, 1 + @choices_nr;
+
+ if (countitem(@IRON_ORE)<10) goto L_no_more_helmets;
+
+ set @choice$[@choices_nr], "Crusade Helmet. (10 Iron Ores)";
+ set @choice_idx[@choices_nr], @CHOICE_CRUSADE;
+ set @choices_nr, 1 + @choices_nr;
+
+ set @choice$[@choices_nr], "Steel Shield. (10 Iron Ores)";
+ set @choice_idx[@choices_nr], @CHOICE_SHIELD;
+ set @choices_nr, 1 + @choices_nr;
+
+ if (countitem(@IRON_ORE)<15) goto L_no_more_helmets;
+
+ set @choice$[@choices_nr], "Warlord Helmet. (15 Iron Ores)";
+ set @choice_idx[@choices_nr], @CHOICE_WARLORD;
+ set @choices_nr, 1 + @choices_nr;
+L_no_more_helmets:
+
+ menu @choice$[0], -,
+ @choice$[1], -,
+ @choice$[2], -,
+ @choice$[3], -,
+ @choice$[4], -;
+
+ set @menu, @menu - 1;
+
+ if (@menu >= @choices_nr)
+ close;
+
+ set @choice, @choice_idx[@menu];
+
+ if (@choice == @CHOICE_KNIGHT) goto L_YesKnight;
+ if (@choice == @CHOICE_CRUSADE) goto L_YesCrusade;
+ if (@choice == @CHOICE_WARLORD) goto L_YesWarlord;
+ if (@choice == @CHOICE_SHIELD) goto L_YesShield;
+ if (@choice == @CHOICE_SETZER) goto L_SetzerQuest;
+
+ close;
+
+
+L_NoItem:
+ mes "[Nicholas]";
+ mes "\"It appears you don't have enough Iron Ore for me to work with.";
+ mes "Please do come back when you have more though.\"";
+ close;
+
+L_ComeBack:
+ mes "[Nicholas]";
+ mes "\"Come back any time.\"";
+ close;
+
+L_NoMoney:
+ mes "[Nicholas]";
+ mes "\"Oh dear, it seems you don't have enough money.\"";
+ close;
+
+L_YesKnight:
+ if (zeny < 10000) goto L_NoMoney;
+ set zeny, zeny-10000;
+ delitem @IRON_ORE,5;
+ getitem 637,1;
+ goto L_Done;
+
+L_YesCrusade:
+ if (zeny < 10000) goto L_NoMoney;
+ set zeny, zeny-10000;
+ delitem @IRON_ORE,10;
+ getitem 639,1;
+ goto L_Done;
+
+L_YesWarlord:
+ if (zeny < 10000) goto L_NoMoney;
+ set zeny, zeny-10000;
+ delitem @IRON_ORE,15;
+ getitem 636,1;
+ goto L_Done;
+
+L_YesShield:
+ mes "[Nicholas]";
+ mes "Nicholas examines your iron ore.";
+ mes "\"No, this iron is too brittle; for something as large as a shield I need to mix in softer iron. Can I see if you have anything suitable?\"";
+ next;
+
+ menu "Sure, have a look!", -,
+ "No.", L_Pass;
+
+ if (countitem(@INFANTRY) == 1) goto L_MoreInfantry;
+ if (countitem(@INFANTRY) == 0) goto L_NoInfantry;
+
+ mes "[Nicholas]";
+ mes "Nicholas pulls out two of your infantry helmets.";
+ mes "\"I can use those... yes, that should work. Now all I need is a leather patch for the handle, and 20,000 GP.\"";
+
+ if (@Q_SHIELD_status < @SHIELD_KNOWS_PATCH)
+ set @Q_SHIELD_status, @SHIELD_KNOWS_PATCH;
+ callsub L_Update_Var;
+
+ next;
+
+ menu "Here you are.", -,
+ "Where can I get a leather patch?", L_WhereLeather,
+ "No way.", L_Pass;
+
+ if (zeny < 20000) goto L_ShieldNoZeny;
+ if (countitem(@INFANTRY) < 2) goto L_ShieldNoInfantry;
+ if (countitem(@IRON_ORE) < 10) goto L_ShieldNoOre;
+ if (countitem(@LEATHER_PATCH) < 1) goto L_ShieldNoLeatherPatch;
+
+ mes "[Nicholas]";
+ mes "\"Yes, it looks as if you have all that is needed!\"";
+ mes "You watch Nicholas melt the ore and helmets and form a shield out of the resulting iron. He then cuts your leather patch apart and adds it to the handles.";
+ mes "\"Here is your shield!\"";
+
+ delitem @INFANTRY, 1;
+ delitem @INFANTRY, 1;
+ delitem @LEATHER_PATCH, 1;
+ delitem @IRON_ORE, 10;
+ set zeny, zeny - 20000;
+
+ if (@Q_SHIELD_status < @SHIELD_COMPLETED)
+ getexp @SHIELD_XP, 0;
+ if (@Q_SHIELD_status < @SHIELD_COMPLETED)
+ mes "[" + @SHIELD_XP + " experience points]";
+
+ set @Q_SHIELD_status, @SHIELD_COMPLETED; // get XP only once
+ callsub L_Update_Var;
+
+ getitem @STEEL_SHIELD, 1;
+ next;
+ close;
+
+L_ShieldNoZeny:
+ mes "[Nicholas]";
+ mes "\"I am sorry, but I must ask that you pay 20,000 GP; this is qualty work.\"";
+ next;
+ close;
+
+L_ShieldNoInfantry:
+ mes "[Nicholas]";
+ mes "\"Now this is strange... I could have sworn that you had two infantry helmets right here. Well, come back if you have some more!\"";
+ next;
+ close;
+
+L_ShieldNoOre:
+ mes "[Nicholas]";
+ mes "\"How odd... didn't I put your iron ore on the table right here? Well, I will need it back to make the shield.\"";
+ next;
+ close;
+
+L_ShieldNoLeatherPatch:
+ mes "[Nicholas]";
+ mes "\"You don't have a suitable leather patch. I'm sorry, but a shield without one would chafe terribly.\"";
+ next;
+ close;
+
+L_MoreInfantry:
+ mes "[Nicholas]";
+ mes "Nicholas takes your infantry helmet and examines it.";
+ mes "\"Yes, this is perfect! If you can bring me another one of those, I can make your shield.\"";
+ next;
+ close;
+
+L_NoInfantry:
+ mes "[Nicholas]";
+ mes "Nicholas shakes his head.";
+ mes "\"No, none of these items are suitable. Try looking for somewhat large metal things.\"";
+ next;
+ close;
+
+L_WhereLeather:
+ mes "[Nicholas]";
+ mes "\"Hmm. You should look for someone who can work with some kind of leather. Rumor has it that there is someone in the eastern desert who can, but I haven't been there.\"";
+ next;
+ close;
+
+
+L_SetzerQuest:
+ mes "[Nicholas]";
+ if (@Q_SETZER_status & @SETZER_FLAG_MADE_SETZER)
+ mes "\"Another one? Sure, why not.\"";
+ mes "Nicholas examines your short sword, then nods.";
+ mes "\"This is good quality. I can make something special out of it, for five chunks of iron ore and 50,000 GP-- but I will also need a potion of monster oil.\"";
+ if (@Q_SETZER_status < @SETZER_KNOWS_OIL)
+ set @Q_SETZER_status, @SETZER_KNOWS_OIL;
+ callsub L_Update_Var;
+ next;
+
+ menu "Here you are.", -,
+ "Monster oil? What's that?", L_ExplainMonsterOil,
+ "HOW much? Never mind.", L_Pass;
+
+ if (zeny < 50000) goto L_SetzerNoZeny;
+ if (countitem(@IRON_ORE) < 5) goto L_SetzerNoOre;
+ if (countitem(@MONSTER_OIL) < 1) goto L_SetzerNoMonsterOil;
+ if (countitem(@SHORT_SWORD) < 1) goto L_SetzerNoSword;
+
+ mes "[Nicholas]";
+ mes "Nicholas takes the items, heats up your sword and pounds it with a heavy hammer. Before your eyes it turns thinner and flatter. Finally he pours the monster oil over it, heats it up again and douses it in water.";
+
+ set zeny, zeny - 50000;
+ delitem @IRON_ORE, 5;
+ delitem @MONSTER_OIL, 1;
+ delitem @SHORT_SWORD, 1;
+
+ getitem @SETZER, 1;
+ if (!(@Q_SETZER_status & @SETZER_FLAG_MADE_SETZER))
+ mes "[" + @SETZER_XP + " experience points]";
+ if (!(@Q_SETZER_status & @SETZER_FLAG_MADE_SETZER))
+ getexp @SETZER_XP, 1;
+ set @Q_SETZER_status, @Q_SETZER_status | @SETZER_FLAG_MADE_SETZER;
+ callsub L_Update_Var;
+ next;
+
+ mes "[Nicholas]";
+ mes "Nicholas hands you the completed sword. It feels strangely light in your hands.";
+ mes "\"I made it lighter and faster, it should also cut a little better now. This kind of sword is called a Setzer, after a famous gambler who invented it as a weapon in between a knife and a sword.\"";
+ next;
+
+ mes "[Nicholas]";
+ mes "\"I'm quite happy with this one. Be careful around the edge, though, it is quite sharp.\"";
+ next;
+
+ close;
+
+L_ExplainMonsterOil:
+ mes "[Nicholas]";
+ mes "\"Monster oil is a special oil that can be used to harden thin sheets of metal, if used properly. Unfortunately it is very hard to get. Perhaps one of our local alchemists can help you with it?\"";
+ next;
+ close;
+
+L_SetzerNoZeny:
+ mes "[Nicholas]";
+ mes "\"I am sorry, but I must ask that you pay 50,000 GP; the kind of weapon I am thinking of is not easy to make.\"";
+ next;
+ close;
+
+L_SetzerNoOre:
+ mes "[Nicholas]";
+ mes "\"Without five chunks of iron ore I can't improve your sword.\"";
+ next;
+ close;
+
+L_SetzerNoMonsterOil:
+ mes "[Nicholas]";
+ mes "\"I know that monster oil is hard to come by, but I can't do much without it. Ask an alchemist if you need help making it.\"";
+ next;
+ close;
+
+L_SetzerNoSword:
+ mes "[Nicholas]";
+ mes "\"I will need your old short sword as a basis. Please bring it to me first.\"";
+ next;
+ close;
+
+L_end:
+ close;
+
+L_Done:
+ mes "[Nicholas]";
+ mes "\"Here you go!\"";
+ mes "";
+ mes "\"Come back any time.\"";
+ close;
+
+L_Update_Var:
+ set QUEST_Forestbow_state,
+ (QUEST_Forestbow_state & ~(@Q_SHIELD_MASK | Q_SETZER_MASK)
+ | (@Q_SHIELD_status << @Q_SHIELD_SHIFT)
+ | (@Q_SETZER_status << @Q_SETZER_SHIFT));
+ return;
+}
diff --git a/npc/new_20-1-woodland-village/nurse.txt b/npc/new_20-1-woodland-village/nurse.txt
new file mode 100644
index 00000000..2ea8acb1
--- /dev/null
+++ b/npc/new_20-1-woodland-village/nurse.txt
@@ -0,0 +1,48 @@
+// Nurse
+
+// heals player below level 10 for free and tells players about the doctor on the 3rd floor.
+new_20-1.gat,147,65,0 script Nurse 119,{
+ mes "[Nurse]";
+ mes "\"Can I help you?\"";
+ next;
+
+ if (Inspector == 1)
+ menu
+ "Oooh, these wounds! They hurts so much!", L_Heal,
+ "I don't feel so well, I might be sick.", L_Doctor,
+ "Have you seen anything out of the ordinary?", L_NohMask,
+ "No, I'm fine.", -;
+ if (Inspector != 1)
+ menu
+ "Oooh, these wounds! They hurts so much!", L_Heal,
+ "I don't feel so well, I might be sick.", L_Doctor,
+ "No, I'm fine.", -;
+ mes "[Nurse]";
+ mes "\"Then I would ask you to leave. There are people who really need our help.\"";
+ close;
+
+L_Doctor:
+ mes "[Nurse]";
+ mes "\"Then you should better see the doctor. He is usually in his office on the 3rd floor.\"";
+ close;
+
+L_Heal:
+ if (baselevel > 10) goto L_NoHeal;
+ mes "[Nurse]";
+ mes "\"Here, let me heal you.\"";
+ next;
+ heal 10000, 10000;
+ close;
+
+L_NoHeal:
+ mes "[Nurse]";
+ mes "\"I'm sorry but I'm here only to help young people.";
+ mes "Your level is already higher than 10.";
+ mes "You can get some rest in the inn near here.\"";
+ close;
+
+L_NohMask:
+ mes "[Nurse]";
+ mes "\"I'm to busy here to observe the town.\"";
+ close;
+}
diff --git a/npc/woodland-village/passages.txt b/npc/new_20-1-woodland-village/passages.txt
index 0eddcdeb..fab35171 100644
--- a/npc/woodland-village/passages.txt
+++ b/npc/new_20-1-woodland-village/passages.txt
@@ -31,6 +31,9 @@ new_19-1.gat,35,29 warp out-in 1,1,new_20-1.gat,50,55
new_20-1.gat,50,56 warp in-out 1,1,new_19-1.gat,35,31
new_20-1.gat,73,45 warp in-1f 2,1,new_20-1.gat,74,23
new_20-1.gat,74,24 warp 1f-in 2,1,new_20-1.gat,73,46
+new_20-1.gat,74,53 warp 1f-1b 0,0,new_20-1.gat,143,81
+new_20-1.gat,143,79 warp 1b-1f 0,0,new_20-1.gat,74,52
+new_20-1.gat,147,89 warp 1b-cv 0,0,new_35-1.gat,173,22
// Archer Shop
new_19-1.gat,59,33 warp out-in 0,0,new_20-1.gat,95,29
@@ -58,3 +61,6 @@ new_20-1.gat,113,79 warp in-out 1,0,new_19-1.gat,72,45
new_20-1.gat,113,68 warp in-1f 1,0,new_20-1.gat,113,46
new_20-1.gat,113,47 warp 1f-in 1,0,new_20-1.gat,113,69
+// General Store
+new_19-1.gat,58,46 warp out-in 0,0,new_20-1.gat,27,105
+new_20-1.gat,27,107 warp in-out 0,0,new_19-1.gat,58,47
diff --git a/npc/new_20-1-woodland-village/richard.txt b/npc/new_20-1-woodland-village/richard.txt
new file mode 100644
index 00000000..a3f47378
--- /dev/null
+++ b/npc/new_20-1-woodland-village/richard.txt
@@ -0,0 +1,6 @@
+//
+
+new_20-1.gat,20, 99,0 script Richard 161,{
+ set @npcName$, "Richard";
+ callfunc "Banker";
+}
diff --git a/npc/new_20-1-woodland-village/selim.txt b/npc/new_20-1-woodland-village/selim.txt
new file mode 100644
index 00000000..2f5981ea
--- /dev/null
+++ b/npc/new_20-1-woodland-village/selim.txt
@@ -0,0 +1,139 @@
+//#################################################################################
+//# #
+//# This script file contains the script for the cloth dyer. It has been #
+//# revised to require dye items; collaborating NPCs are Selim and Angus. #
+//# #
+//#################################################################################
+
+new_20-1.gat,32,104,0 script Selim 142,{
+ setarray @all_colours$, "red", "green", "dark blue", "yellow", "light blue", "pink", "black", "orange", "purple", "dark green";
+ setarray @all_colours_cap$, "Red", "Green", "Dark Blue", "Yellow", "Light Blue", "Pink", "Black", "Orange", "Purple", "Dark Green";
+
+ mes "[Selim]";
+ mes "\"What can I dye for you today?\"";
+ set QUEST_clothdyer_state, 3;
+ next;
+
+L_clothes_choice:
+ set @pronoun$, "it";
+ set @is_verb$, "is";
+ menu
+ "Cotton shirt", L_cottonshirt,
+ "V-Neck sweater", L_vneck,
+ "Turtleneck sweater", L_tneck,
+ "Cotton shorts", L_shorts,
+ "Cotton skirt", L_skirt,
+ "Tank top ", L_tanktop,
+ "Short tank top", L_tanktop_short,
+ "Silk robe", L_robe,
+ "I'm fine for now, thanks.", -;
+ close;
+
+L_cottonshirt:
+ set @del, 1202;
+ set @new, 2050;
+ set @name$, "cotton shirt";
+ goto L_picked_item;
+
+L_vneck:
+ set @del, 624;
+ set @new, 2060;
+ set @name$, "V-neck sweater";
+ goto L_picked_item;
+
+L_tneck:
+ set @del, 564;
+ set @new, 2070;
+ set @name$, "turtleneck sweater";
+ goto L_picked_item;
+
+L_shorts:
+ set @del, 586;
+ set @new, 2110;
+ set @name$, "cotton shorts";
+ set @pronoun$, "them";
+ set @is_verb$, "are";
+ goto L_picked_item;
+
+L_skirt:
+ set @del, 632;
+ set @new, 2100;
+ set @name$, "cotton skirt";
+ goto L_picked_item;
+
+L_tanktop:
+ set @del, 688;
+ set @new, 2090;
+ set @name$, "tanktop";
+ goto L_picked_item;
+
+L_tanktop_short:
+ set @del, 689;
+ set @new, 2120;
+ set @name$, "short tanktop";
+ goto L_picked_item;
+
+L_robe:
+ set @del, 720;
+ set @new, 2080;
+ set @name$, "silk robe";
+ goto L_picked_item;
+
+L_picked_item:
+ if (countitem(@del) == 0) goto L_havenone;
+L_colour:
+ mes "[Selim]";
+ mes "\"Excellent. Now, what color do you want?\"";
+ next;
+ menu
+ @all_colours_cap$[0], -,
+ @all_colours_cap$[1], -,
+ @all_colours_cap$[2], -,
+ @all_colours_cap$[3], -,
+ @all_colours_cap$[4], -,
+ @all_colours_cap$[5], -,
+ @all_colours_cap$[6], -,
+ @all_colours_cap$[7], -,
+ @all_colours_cap$[8], -,
+ @all_colours_cap$[9], -;
+ set @colour, @menu - 1;
+ set @vial, 690 + @colour;
+ if (countitem(@vial) == 0) goto L_no_dye;
+ goto L_finish;
+
+L_no_dye:
+ mes "[Selim]";
+ mes "\"I would love to dye your " + @name$ + " for you, but you will have to bring me some " + @all_colours$[@colour] + " dye first.\"";
+ next;
+ menu
+ "Sorry, I meant a different color.", L_colour,
+ "I wanted to dye a different item anyway.", L_clothes_choice,
+ "What do you mean, `bring you dye'?", L_explain_dye,
+ "Where would I get dye?", L_explain_dye,
+ "Never mind.", -;
+ close;
+
+L_explain_dye:
+ if (QUEST_clothdyer_knowsdye < 1) set QUEST_clothdyer_knowsdye, 1;
+ mes "[Selim]";
+ mes "\"Well, dye is very expensive, and since I don't charge adventurers anything, I can't give you any for free.";
+ mes "But most alchemists can make dye; perhaps you can find one around here.\"";
+ next;
+ close;
+
+L_finish:
+ if (countitem(@del) == 0) goto L_havenone;
+ delitem @vial, 1;
+ delitem @del, 1;
+ getitem @new + @colour, 1;
+ mes "[Selim]";
+ mes "\"Here " + @is_verb$ + " your " + @all_colours$[@colour] + " " + @name$ + "! Please let " + @pronoun$ + " dry for a minute before you put " + @pronoun$ + " on.\"";
+ close;
+
+L_havenone:
+ mes "[Selim]";
+ mes "\"You don't have any uncolored " + @name$ + "? That's unfortunate.";
+ mes "Would you like to dye something else?\"";
+ next;
+ goto L_clothes_choice;
+}
diff --git a/npc/new_20-1-woodland-village/shops.txt b/npc/new_20-1-woodland-village/shops.txt
new file mode 100644
index 00000000..6094eb20
--- /dev/null
+++ b/npc/new_20-1-woodland-village/shops.txt
@@ -0,0 +1,34 @@
+//#################################################################################
+//# #
+//# This script file contains all shops and other NPCs with important functions. #
+//# #
+//#################################################################################
+
+// Bartender
+// sells beer, cake and steak
+new_20-1.gat,65,49,0 shop Barkeeper 112,539:-1,513:-1,676:-1
+
+// Receptionist
+// Offers the player to rest at the inn for 100gp
+new_20-1.gat,50,48,0 script Receptionist 108,{
+ set @npcName$, "Receptionist";
+ set @cost, 100;
+ callfunc "Inn";
+}
+
+// Archer Shop
+// sells bow, short bow, arrows and iron arrows
+new_20-1.gat,97,24,0 shop Apprentice 120,1199:3,529:5,1200:1000,530:3000
+
+// Potion Shop
+// sells cactus drink, cactus potion, iron potion and concentration potion
+new_20-1.gat,121,26,0 shop Witch 103,501:50,502:70,567:500,568:500
+
+// Blacksmith
+// Sells all knives, chainmail armor, light platemail
+new_20-1.gat,183,57,0 shop Blacksmith 135,625:20000,626:50000,658:100000,1201:25,522:100,521:1000
+
+
+// General Store
+// Sells various things, many not sold elsewhere
+new_20-1.gat,32,99,0 shop General Store 112,527:-1,541:-1,1202:-1,586:-1,528:-1,656:-1
diff --git a/npc/new_20-1-woodland-village/waitress.txt b/npc/new_20-1-woodland-village/waitress.txt
new file mode 100644
index 00000000..d5e1ad20
--- /dev/null
+++ b/npc/new_20-1-woodland-village/waitress.txt
@@ -0,0 +1,51 @@
+// Waitress
+
+new_20-1.gat,60,52,0 script Melinda 140,{
+ if (zeny < 180) goto L_NoMoney;
+ mes "[Melinda]";
+ mes "\"Hi sweety! Want a fresh beer for 170gp?\"";
+ next;
+
+ menu
+ "\"Sure! [don't tip]\"", -,
+ "Sure! [tip 5gp]", L_5Tip,
+ "Sure! [tip 10gp]", L_10Tip,
+ "Nah, maybe later.", L_No;
+
+ mes "[Melinda]";
+ mes "Pff... nickel nurser!";
+ next;
+ set zeny,zeny-170;
+ getitem 539,1;
+ close;
+
+L_5Tip:
+ mes "[Melinda]";
+ mes "\"Here you go, sweethearth!\"";
+ next;
+ set zeny,zeny-175;
+ getitem 539,1;
+ close;
+
+L_10Tip:
+ mes "[Melinda]";
+ mes "\"Thank you, sweety! Want me to hear a secret?\"";
+ next;
+ set zeny,zeny-180;
+ getitem 539,1;
+ menu
+ "What's it, darling?", -,
+ "Nah, I don't feel like chatting.", L_No;
+ mes "[Melinda]";
+ mes "\"The bowmaking master in this village used to construct exceptional bows. When you want one you should go and ask him.\"";
+ close;
+
+L_No:
+ mes "[Melinda]";
+ mes "\"Just call me when you've changed your mind.\"";
+ close;
+
+L_NoMoney:
+ mes "\"You look broke. Don't think that you can dine and dash here!\"";
+ close;
+}
diff --git a/npc/new_21-1-ice-cave2/monsters.txt b/npc/new_21-1-ice-cave2/monsters.txt
new file mode 100644
index 00000000..b0b1c336
--- /dev/null
+++ b/npc/new_21-1-ice-cave2/monsters.txt
@@ -0,0 +1,20 @@
+// Map: new_21-1
+// This is the second level of the Ice Cave beneath Snow Town.
+//
+
+new_21-1.gat,0,0,0,0 monster Bat 1017,5,0,0,Mob21::OnBat
+new_21-1.gat,0,0,0,0 monster Fluffy 1020,15,0,0,Mob21::OnFluffy
+
+new_21-1.gat,0,0,0 script Mob21 -1,{
+OnBat:
+ set @mobID, 1017;
+ callfunc "MobPoints";
+ break;
+
+OnFluffy:
+ set @mobID, 1020;
+ callfunc "MobPoints";
+ break;
+
+ end;
+}
diff --git a/npc/new_21-1-ice-cave2/passages.txt b/npc/new_21-1-ice-cave2/passages.txt
new file mode 100644
index 00000000..c8474a09
--- /dev/null
+++ b/npc/new_21-1-ice-cave2/passages.txt
@@ -0,0 +1 @@
+new_21-1.gat,36,34 warp toice1 1,0,new_12-1.gat,26,25
diff --git a/npc/new_22-1-snake-cave/monsters.txt b/npc/new_22-1-snake-cave/monsters.txt
new file mode 100644
index 00000000..8d88def8
--- /dev/null
+++ b/npc/new_22-1-snake-cave/monsters.txt
@@ -0,0 +1,14 @@
+// Map: new_22-1
+// This is the Snake Pit, a cave in the Snake Desert.
+//
+
+new_22-1.gat,0,0,0,0 monster Snake 1010,175,0,0,Mob22::OnSnake
+
+new_22-1.gat,0,0,0 script Mob22 -1,{
+OnSnake:
+ set @mobID, 1010;
+ callfunc "MobPoints";
+ break;
+
+ end;
+}
diff --git a/npc/new_22-1-snake-cave/passages.txt b/npc/new_22-1-snake-cave/passages.txt
new file mode 100644
index 00000000..adf4468d
--- /dev/null
+++ b/npc/new_22-1-snake-cave/passages.txt
@@ -0,0 +1,2 @@
+new_22-1.gat,52,33 warp fromsnakecaveN 0,0,new_7-1.gat,89,24
+new_22-1.gat,33,82 warp fromsnakecaveS 0,0,new_7-1.gat,71,76 \ No newline at end of file
diff --git a/npc/dimonds-cove/dimonds.txt b/npc/new_23-1-dimonds-cove/dimonds.txt
index f539e8fa..05d83b5c 100644
--- a/npc/dimonds-cove/dimonds.txt
+++ b/npc/new_23-1-dimonds-cove/dimonds.txt
@@ -1,32 +1,40 @@
-new_23-1.gat,34,38,0 script Host 112,{
- mes "Welcome to Dimonds Cove!";
- next;
- mes "Talk to the waitress to get some Food.";
- next;
- mes "Shops are located on the 2nd Floor.";
- next;
- mes "The INN is on the 3rd Floor.";
+//
+
+new_23-1.gat,34,38,0 script Dimond 165,{
+ mes "[Dimond]";
+ mes "\"Welcome to Dimond's Cove!\"";
+ mes "";
+ mes "\"Talk to the waitress to get some Food.\"";
+ mes "";
+ mes "\"We also have shops on the 2nd Floor,";
+ mes "and an inn on the 3rd Floor.\"";
close;
}
-new_23-1.gat,40,34,0 script Phill 102,{
- mes "We're having problems with our equipment!";
+new_23-1.gat,40,34,0 script Phill 157,{
+ mes "[Phil]";
+ mes "\"We're having problems with our equipment!\"";
next;
- mes "I don't know if we can play any songs!";
+ mes "[Phil]";
+ mes "\"I don't know if we can play any songs!\"";
close;
}
-new_23-1.gat,40,37,0 script Jerry 117,{
- mes "I don't know what wrong.";
+new_23-1.gat,40,37,0 script Jerry 160,{
+ mes "[Jerry]";
+ mes "\"I don't know what's wrong.\"";
next;
- mes "We should be able to play you music in the future!";
+ mes "[Jerry]";
+ mes "\"We should be able to play you music in the future!\"";
close;
}
-new_23-1.gat,42,36,0 script Robert 120,{
- mes "I hope we can figure something out!";
+new_23-1.gat,42,36,0 script Robert 162,{
+ mes "[Robert]";
+ mes "\"I hope we can figure something out!\"";
next;
- mes "We are kinda useless if we can't play music.";
+ mes "[Robert]";
+ mes "\"We are kinda useless if we can't play music.\"";
close;
}
@@ -40,7 +48,7 @@ new_23-1.gat,27,30,0 script Bar Rules 127,{
mes "This is a nice establishment.";
mes "Crude and offensive behavior will be reported to TMW GM's.";
next;
- mes "Please be respectfull of others.";
+ mes "Please be respectful of others.";
mes "Not everyone has the same experience and should all be treated";
mes "with equal respect.";
next;
@@ -57,7 +65,7 @@ new_23-1.gat,71,38,0 script Store Policy 127,{
new_23-1.gat,77,38,0 script Store Policy 127,{
mes "All sales are final.";
- mes "returns are subject to a 50% re-stocking fee.";
+ mes "Returns are subject to a 50% re-stocking fee.";
close;
}
@@ -71,9 +79,9 @@ new_23-1.gat,80,32,0 script Dimonds Cove 1 127,{
mes "The Story of Dimonds Cove";
next;
mes "One day Dimond D. Stone dreamed of her own restaurant.";
- mes "She sold her food alone in this spot for some time.";
- mes "She longed for the day she would have a building.";
- mes "She meet an adventurer named Merlin outside of the";
+ mes "Dimond sold her food alone in this spot for some time,";
+ mes "longing for the day she would have a building.";
+ mes "She met an adventurer named Merlin outside of the";
mes "desert mines one day.";
next;
mes "They became friends and Dimond told Merlin about her idea.";
@@ -93,7 +101,7 @@ new_23-1.gat,85,32,0 script Dimonds Cove 2 127,{
}
-new_23-1.gat,71,30,0 script INN 127,{
+new_23-1.gat,71,30,0 script Inn 127,{
mes "Welcome to the Dimonds Cove Inn";
mes "Rooms are 200 gp a night.";
mes "Plese check in with Basil.";
@@ -101,35 +109,22 @@ new_23-1.gat,71,30,0 script INN 127,{
}
-new_23-1.gat,24,27,0 shop Bartender 107,539:175,567:500,568:500
+new_23-1.gat,24,27,0 shop Bartender 112,539:175,567:500,568:500
-new_23-1.gat,32,34,0 shop Waitress 139,519:100,533:150,534:90,562:500
+new_23-1.gat,32,34,0 shop Waitress 139,519:100,533:150,534:90,562:500,676:200
-new_23-1.gat,85,41,0 shop Blacksmith 135,545:20000,529:5,625:20000,626:50000
+new_23-1.gat,85,41,0 shop Blacksmith 146,545:20000,529:5,625:20000,626:50000,603:-1
new_23-1.gat,65,41,0 shop General Store 137,586:1000,524:1600,544:10000,632:10000,528:1000
new_23-1.gat,75,68,0 script Basil 107,{
- mes "[Inn Keeper]";
- mes "Welcome to the Inn.";
- next;
- mes "Would you like to rest? It's 200gp.";
- next;
- menu "Yes",-,"No",L_No;
-
- if (zeny < 200) goto L_NoMoney;
- mes "Sleep well!";
- next;
- set zeny,zeny-200;
- heal 10000,10000;
- close;
-
-L_No:
- mes "See you.";
- close;
+ set @npcName$, "[Basil the Inn Keeper]";
+ set @cost, 200;
+ callfunc "Inn";
+}
-L_NoMoney:
- mes "Hey! You don't have enough money!";
+new_23-1.gat,33,25,0 script Chef 148,{
+ mes "[Chef]";
+ mes "I'm too busy right now to talk.";
close;
}
-
diff --git a/npc/new_23-1-dimonds-cove/doug.txt b/npc/new_23-1-dimonds-cove/doug.txt
new file mode 100644
index 00000000..301ae9a7
--- /dev/null
+++ b/npc/new_23-1-dimonds-cove/doug.txt
@@ -0,0 +1,101 @@
+new_23-1.gat,68,87,0 script Doug 113,{
+ if(CaveSnakeLamp == 1) goto L_State2;
+ if(CaveSnakeLamp == 2) goto L_Done;
+ set @TEMP,rand(4);
+ if(@TEMP == 0) goto L_0;
+ if(@TEMP == 1) goto L_1;
+ if(@TEMP == 2) goto L_2;
+ if(@TEMP == 3) goto L_3;
+
+L_0:
+ mes "[Doug]";
+ mes "\"I need 40 more [Cave Snake Lamps] to make my light!\"";
+ next;
+ goto L_Question;
+L_1:
+ mes "[Doug]";
+ mes "\"This lamp should light up this whole place! I just need [40 Cave Snake Lamps]\"";
+ next;
+ goto L_Question;
+L_2:
+ mes "[Doug]";
+ mes "\"This is gonna be bright! A must have for anyone! All i need is a few parts...\"";
+ goto main1;
+
+L_3:
+ mes "[Doug]";
+ mes "\"Can you get me 40 [Cave Snake Lamps]? I need them to get this light finished.\"";
+ next;
+ goto L_Question;
+
+L_Question:
+ mes "[Doug]";
+ mes "\"Will you help me find 40 [Cave Snake Lamps]?\"";
+ next;
+ menu
+ "Yes", L_Sure,
+ "No", close;
+
+L_Sure:
+ set CaveSnakeLamp, 1;
+ set @TEMP,rand(4);
+ if(@TEMP == 0) goto J_0;
+ if(@TEMP == 1) goto J_1;
+ if(@TEMP == 2) goto J_2;
+ if(@TEMP == 3) goto J_3;
+
+J_0:
+ mes "[Doug]";
+ mes "\"Thank you!\"";
+ next;
+ goto L_Go;
+
+J_1:
+ mes "[Doug]";
+ mes "\"I don't know how to thank you enough!\"";
+ next;
+ goto L_Go;
+
+J_2:
+ mes "[Doug]";
+ mes "\"I will pay you when you get them!\"";
+ next;
+ goto L_Go;
+
+J_3:
+ mes "[Doug]";
+ mes "\"I'm sure I will give a small reward. :D\"";
+ next;
+ goto L_Go;
+
+L_Go:
+ mes "[Doug]";
+ mes "\"Now please go get me 40 [Cave Snake Lamps]\"";
+ close;
+
+L_State2:
+ if(countitem(612) >= 40) goto L_Have;
+ mes "[Doug]";
+ mes "\"Please help me collect 40 [Cave Snake Lamps]!\"";
+ close;
+
+L_Have:
+ delitem 612, 40;
+ mes "[Doug]";
+ mes "\"Cool! Now I can make this light!\"";
+ next;
+
+ mes "[Doug]";
+ mes "\"Here's what I got to give you!\"";
+ next;
+
+ set zeny, zeny + 2000;
+ set CaveSnakeLamp, 2;
+ close;
+
+L_Done:
+ mes "[Doug]";
+ mes "\"Thanks for your help! Those snakes sure have bright lamps!\"";
+ close;
+}
+
diff --git a/npc/new_23-1-dimonds-cove/loratay.txt b/npc/new_23-1-dimonds-cove/loratay.txt
new file mode 100644
index 00000000..744557e7
--- /dev/null
+++ b/npc/new_23-1-dimonds-cove/loratay.txt
@@ -0,0 +1,632 @@
+new_23-1.gat,85,85,0 script Lora Tay 151,{
+
+ set @COTTON, 660;
+ set @SILK_COCOON, 718;
+
+ set @SILK_ROBE, 720;
+ set @ROBE_COCOONS_NR, 150; // must be multiple of ten
+ set @ROBE_ZENY, 10000;
+
+ if (QUEST_WG_state == 10)
+ goto L_agostine_menu;
+ if (QUEST_WG_state >= 11)
+ goto L_regular_intro;
+
+ set @t, rand(3);
+ if (@t == 0) goto L_intro_0;
+ if (@t == 1) goto L_intro_1;
+
+ mes "You see a middle-aged woman furiously sewing away at what appears to be a very expensive dress. Her fingers are moving so nimbly that you find it near-impossible to follow the needle.";
+
+ goto L_intro_over;
+L_intro_0:
+ mes "You notice a middle-aged woman carefully drawing lines on a large sheet of cotton.";
+
+ goto L_intro_over;
+L_intro_1:
+ mes "You see a middle-aged woman cautiously but surprisingly swiftly cutting out shapes from a huge cotton sheet. The scissors glide along the cloth as if it were butter, never leaving the premarked lines.";
+
+L_intro_over:
+ next;
+
+ mes "She suddenly stops and looks up.";
+ next;
+
+ mes "\"Now who are you, and what are you doing here?\"";
+ mes "She squints, pushes her thick spectacles up the bridge of her nose and eyes you suspiciously.";
+ next;
+
+ set @agostine_msg0$, "";
+ set @agostine_msg1$, "";
+
+ if (QUEST_WG_state >= 1)
+ set @agostine_msg0$, "Do you know Agostine?";
+ if ((QUEST_WG_state >= 9) && (countitem(655)))
+ set @agostine_msg1$, "Can you make fur boots, like Agostine?";
+
+ menu "Hello! My name is " + strcharinfo(0) + ".", L_hello_0,
+ "Hello; are you a tailor?", L_hello_1,
+ "Can you make something for me?", L_hello_2,
+ @agostine_msg0$, L_agostine_0,
+ @agostine_msg1$, L_agostine_1;
+
+L_hello_0:
+ mes "She raises an eyebrow.";
+ mes "\"That,\", she notes dryly, \"is hardly my fault. And now I would greatly appreciate it if you were to get out of here and leave me to my work!\"";
+ next;
+ close;
+
+L_hello_1:
+ mes "She frowns.";
+ mes "\"No, I am an accupuncturist, I just happen to practice on cloth! Get out of here with your silly questions!\"";
+ next;
+ close;
+
+L_hello_2:
+ mes "She glares at you indignantly.";
+ mes "\"Do you even know whom you are talking to? I am Lora Tay, greatest of the seven seamstresses of the South!\"";
+ next;
+ mes "[Lora Tay the Seamstress]";
+ mes "\"I do not work for petty peasants or arrogant adventurers. Get out of my sight!\"";
+ mes "She waves you away and returns to her work.";
+ next;
+ close;
+
+
+L_agostine_0:
+ if (QUEST_WG_state < 1) close;
+ mes "She shoots an incensed glare at you.";
+ mes "\"Ah, Agostine! The 'legendary tailor'! Now who has not heard of him, been inspired by him! Such charisma! Such popularity! Such unprecedented lack of talent!\"";
+ mes "You notice that she prononuces the 't's as if she were trying to slap someone.";
+ next;
+ mes "\"Please spare me your tales of this fool. He couldn't mend a sock without getting himself trapped inside!\"";
+ mes "She frowns and turns back to her work, clearly not interested in discussing the matter further.";
+ close;
+
+L_agostine_1:
+ if ((QUEST_WG_state < 9) || (countitem (655) == 0)) close;
+ mes "[Lora Tay the Seamstress]";
+ mes "She glares at your boots, her lips forming barely more than a thin line. Deep furrows form above her brows.";
+ mes "\"I can't believe it! He copied Illana's design but used fluffy fur in place of ice wolf fur-- Fluffy fur! Of all things! Who would wear such an atrocity of fashion! Everyone knows that you need ice-white, not pale-white, to go with such leather!\"";
+ next;
+ mes "[Lora Tay the Seamstress]";
+ mes "She looks at them more closely.";
+ mes "\"This insolent upstart! Even worse, he copied my very own double-backward cross-stitch pattern... I can't believe it!\"";
+ next;
+ mes "[Lora Tay the Seamstress]";
+ mes "Angry red spots begin to form on her cheeks.";
+ mes "\"Get those... things out of my sight before I forget myself!\"";
+
+ if (QUEST_WG_state == 9)
+ set QUEST_WG_state, 10;
+
+ next;
+ close;
+
+L_agostine_menu:
+ mes "[Lora Tay the Seamstress]";
+ mes "The seamstress looks up at you from her work.";
+ mes "\"I do hope that you have not had any more dealings with this... this lumberjack of a tailor?\"";
+ next;
+
+ if (countitem(563) > 0)
+ menu "You mean Agostine?", L_agostine_3,
+ "Actually, he also made me gloves...", L_agostine_2,
+ "Why don't you like him?", L_agostine_4,
+ "No, none, really.", L_agostine_5;
+
+ menu "You mean Agostine?", L_agostine_3,
+ "Why don't you like him?", L_agostine_4,
+ "No, none, really.", L_agostine_5;
+
+L_agostine_2:
+ if ((QUEST_WG_state < 9) || (countitem(563) == 0)) close;
+ mes "[Lora Tay the Seamstress]";
+ mes "Lora inspects your gloves, shock apparent on her face.";
+ mes "\"Winter gloves? And he managed the join stitches without adding a single crease... no, that can't be the Agostine we were talking about...\"";
+ mes "Without asking, she takes your gloves and inspects them further.";
+ next;
+
+ mes "[Lora Tay the Seamstress]";
+ mes "\"Triple inverted crossbar... he stole another of my stitching patterns! Except... no, that couldn't hold... what kind of yarn...\"";
+ mes "Torn between excitement, worry, and latent disgust, she frantically turns the gloves from side to side, looking for obvious flaws, her face reddening.";
+ next;
+
+ mes "[Lora Tay the Seamstress]";
+ mes "\"No, it's perfect... Inconceivable! How could that little upstart... I don't believe it!\"";
+ mes "Breathing heavily with something that might be anger or confusion, she turns them inside out.";
+ next;
+
+ mes "[Lora Tay the Seamstress]";
+ mes "She slides her fingers over the now-exposed inside whilst the color of her face approaches that of an over-ripe tomato.";
+ mes "\"Almost perfectly smooth...\", she whispers.";
+ next;
+
+ mes "[Lora Tay the Seamstress]";
+ mes "She jumps up in a fit of sudden rage.";
+ mes "\"That's impossible! Where did he learn to sew like that! How did he cut the shapes so perfectly! When did he...";
+ mes "Suddenly, she breaks into a cough.";
+ next;
+
+ mes "[Lora Tay the Seamstress]";
+ mes "\"*cough* ... can't possibly... *cough*...\"";
+ mes "Lora sinks back on her chair, trying to control her cough.";
+ next;
+
+ if (countitem(541))
+ menu "(sneak out of the room)", L_end,
+ "Are you alright?", -,
+ "Here, have a bottle of water...", L_give_water,
+ "Can I help you?", -;
+
+ if (countitem(541) == 0)
+ menu "(sneak out of the room)", L_end,
+ "Are you alright?", -,
+ "Can I help you?", -;
+
+ mes "[Lora Tay the Seamstress]";
+ mes "She holds out your gloves for you to pick up, then waves you out of the room. Fortunately, her cough seems to be slowly subsiding.";
+ next;
+ close;
+
+L_agostine_3:
+ mes "[Lora Tay the Seamstress]";
+ mes "She frowns at you.";
+ mes "\"What other self-absorbed tailor-pretends with the sewing skill of a mouboo are there around? Stop wasting my time.\"";
+ next;
+ close;
+
+L_agostine_4:
+ mes "[Lora Tay the Seamstress]";
+ mes "\"Is it not obvious? We are talking about someone so self-absorbed that he chose to ignore the advice of myself, greatest of the seven southern seamstresses! I cannot stand such arrogance.\"";
+ next;
+ close;
+
+L_agostine_5:
+ mes "[Lora Tay the Seamstress]";
+ mes "\"Good for you. That arrogant good-for-nothing couldn't tell a piece of cotton from chain mail if wiped his nose with it!\"";
+ close;
+
+L_no_water:
+ mes "Checking more closely, you realize that you are out of water.";
+ mes "You apologise to Lora, though it fortunately seems that her cough is subsiding.";
+ mes "She waves you out of the room.";
+ next;
+ close;
+
+L_regular_intro:
+ mes "[Lora Tay the Seamstress]";
+ mes "\"Ah, you again. Is there anything in particular you need?\"";
+ next;
+ goto L_main_menu;
+
+L_give_water:
+ if (countitem(541) == 0) goto L_no_water;
+ delitem 541, 1;
+ set QUEST_WG_state, 11;
+
+ set @xpval, 50000;
+
+ getexp @xpval, 0;
+ mes "[Lora Tay the Seamstress]";
+
+ mes "Lora grabs your water bottle and take a deep sip. Slowly, her head regains a more natural color. As she puts the bottle down, her cough seems to have subsided.";
+ mes "\"Thank you, dear; that was just the right thing at the right time.\"";
+ mes "[You gain " + @xpval + " experience points]";
+ next;
+
+ mes "[Lora Tay the Seamstress]";
+ mes "She hands you the winter gloves again.";
+ mes "\"Now what happened I don't know, but this wasn't made by the Agostine I remember. But I shan't be made a fool out of by one such as him.\"";
+ next;
+
+ mes "[Lora Tay the Seamstress]";
+ mes "\"If HE can sew petty every-day items for ordinary peasants, then so can I. Very well, is there anything in particular that you need made? I shall show you how a proper seamstress operates!\"";
+ next;
+
+L_main_menu:
+ menu "Can you trim something for me?", L_trim,
+ "Can you lengthen something for me?", L_lengthen,
+ "Can you make me a shirt?", L_shirt,
+ "Can you make me a tank top?", L_tanktop,
+ "Can you make me a cape?", L_cape,
+ "Can you make fur boots for me?", -,
+ "Can you make winter gloves me?", -,
+ "Can you sew a robe for me?", L_robe,
+ "Goodbye for now!", L_end;
+
+ mes "[Lora Tay the Seamstress]";
+ mes "\"From what? Fluffy fur? I won't work with such lowly materials.\"";
+ next;
+ goto L_main_menu;
+
+L_trim:
+ mes "[Lora Tay the Seamstress]";
+ mes "\"Trimming... you mean that you can't do that yourself? Well, alright... I suppose I should charge 100 GP and do it.\"";
+ mes "\"Alright. What is it that you want trimmed?\"";
+ next;
+
+ set @default_choice$, "Never mind.";
+ setarray @items, 1202, 2050, 2051, 2052, 2053, 2054, 2055, 2056, 2057, 2058, 2059,
+ 688, 2090, 2091, 2092, 2093, 2094, 2095, 2096, 2097, 2098, 2099;
+ setarray @item_names$, "cotton shirt", "red cotton shirt", "green cotton shirt", "dark blue cotton shirt", "yellow cotton shirt", "light blue cotton shirt", "pink cotton shirt", "black cotton shirt", "orange cotton shirt", "puple cotton shirt", "cotton shirt 9",
+ "tank top", "red tank top", "green tank top", "dark blue tank top", "yellow tank top", "light blue tank top", "pink tank top", "black tank top", "orange tank top", "purple tank top", "tank top 9";
+ set @items_nr, 22;
+ callsub SUB_pick_one_of_many_items;
+ if (@item == 0) goto L_main_menu;
+
+ set @delitem, @item;
+ set @genitem, 0;
+ if (@item == 1202) set @genitem, 688;
+ if (@item == 688) set @genitem, 689;
+ if (@item >= 2090 && @item <= 2099) set @genitem, @item + 30;
+ if (@item >= 2050 && @item <= 2059) set @genitem, @item + 40;
+
+ if (@genitem == 0) goto L_trim_impossible;
+ if (zeny < 100) goto L_trim_nozeny;
+
+ delitem @delitem, 1;
+ getitem @genitem, 1;
+ set zeny, zeny - 100;
+ mes "[Lora Tay the Seamstress]";
+ mes "";
+ mes "\"There you are, dear.\"";
+ next;
+ goto L_main_menu;
+
+L_trim_impossible:
+ mes "[Lora Tay the Seamstress]"; // INTERNAL ERROR
+ mes "\"I don't really want to shorten this any more.\"";
+ next;
+
+ goto L_main_menu;
+
+L_trim_nozeny:
+ mes "[Lora Tay the Seamstress]";
+ mes "\"Not enough GP? Well, just do it yourself-- trimming really is trivial.\"";
+ next;
+
+ goto L_main_menu;
+
+L_lengthen:
+ mes "[Lora Tay the Seamstress]";
+ mes "\"Naturally, I will need a piece of cotton to sew onto it; I must also charge you some... hmm... does 500 GP sound reasonable? Yes, I think I shall charge that.\"";
+ mes "\"Now, let me see. What is it that you want lengthened?\"";
+ next;
+
+ set @default_choice$, "Never mind.";
+ setarray @items, 688, 2090, 2091, 2092, 2093, 2094, 2095, 2096, 2097, 2098, 2099,
+ 689, 2120, 2121, 2122, 2123, 2124, 2125, 2126, 2127, 2128, 2129;
+ setarray @item_names$, "tank top", "red tank top", "green tank top", "dark blue tank top", "yellow tank top", "light blue tank top", "pink tank top", "black tank top", "orange tank top", "purple tank top", "tank top 9",
+ "short tank top", "red short tank top", "green short tank top", "dark blue short tank top", "yellow short tank top", "light blue short tank top", "pink short tank top", "black short tank top", "orange short tank top", "purple short tank top", "short tank top 9";
+ set @items_nr, 22;
+ callsub SUB_pick_one_of_many_items;
+ if (@item == 0) goto L_main_menu;
+
+ set @delitem, @item;
+ set @genitem, 0;
+ if (@item == 688) set @genitem, 1202;
+ if (@item == 689) set @genitem, 688;
+ if (@item >= 2120 && @item <= 2129) set @genitem, @item - 30;
+ if (@item >= 2090 && @item <= 2099) set @genitem, @item - 40;
+
+ if (@genitem == 0) goto L_lengthen_impossible;
+ if (zeny < 500) goto L_lengthen_nozeny;
+ if (countitem (@COTTON) < 1) goto L_lengthen_nocotton;
+
+ delitem @delitem, 1;
+ delitem @COTTON, 1;
+ getitem @genitem, 1;
+ set zeny, zeny - 500;
+ mes "[Lora Tay the Seamstress]";
+ mes "The seamstress cuts your piece of cotton cloth into stripes and sews them on. Using some odd liquid, she flattens the seams and borders.";
+ if (@delitem > 2000) // dyed
+ mes "She then applies another liquid-- smelling strangely of fermented apples-- to the result, wraps it up, and wrings it tightly. As she unwraps it, you observe to your amazement that the dye has spread to the newly attached area.";
+ mes "\"There you are, dear.\"";
+ next;
+ goto L_main_menu;
+
+L_lengthen_nocotton:
+ mes "[Lora Tay the Seamstress]";
+ mes "\"Who do you think I am? The cotton fairy? Get yourself some cloth before you ask me to sew it on.\"";
+ next;
+
+ goto L_main_menu;
+
+L_lengthen_nozeny:
+ mes "[Lora Tay the Seamstress]";
+ mes "\"No gold, no sewing.\"";
+ next;
+
+ goto L_main_menu;
+
+L_lengthen_impossible:
+ mes "[Lora Tay the Seamstress]"; // INTERNAL ERROR
+ mes "\"I really can't lengthen that any more.\"";
+ next;
+
+ goto L_main_menu;
+
+L_shirt:
+ mes "[Lora Tay the Seamstress]";
+ mes "\"Oh, how silly. You can by those everywhere. Please don't bore me with such trifles, dear.\"";
+ next;
+
+ goto L_main_menu;
+
+L_tanktop:
+ mes "[Lora Tay the Seamstress]";
+ mes "\"A tank top? Well, hardly a challenge, but I suppose I could do that. Please get me some cloth-- plain cotton will do-- and, let's see, how does 100,000 GP for my efforts sound?\"";
+ mes "\"Wait, I keep forgetting, you are just an adventurer... let's make that 1000 GP, then.\"";
+ next;
+
+L_tanktop_menu:
+ menu "I think I would like something else.", L_main_menu,
+ "A tank top, please (6 cotton)", L_tanktop_long,
+ "A short tank top, please (5 cotton)", L_tanktop_short,
+ "Goodbye for now.", L_end;
+
+L_tanktop_short:
+ if (countitem (@COTTON) < 5) goto L_tanktop_insufficient_cloth;
+ if (zeny < 1000) goto L_tanktop_insufficient_zeny;
+ set zeny, zeny - 1000;
+ delitem @COTTON, 5;
+ getitem 689, 1;
+ mes "[Lora Tay the Seamstress]";
+ mes "You watch as Lora sews the pieces of cloth together, then flattens the seams and ends with some odd liquid.";
+ mes "Amazingly, the result looks like a single piece of cloth.";
+ mes "After little more than a few elegant cuts and folds, your tank top is ready.";
+ mes "\"Oh dear, it seems that I am done already. Do you need anything else?\"";
+ next;
+ goto L_tanktop_menu;
+
+L_tanktop_long:
+ if (countitem (@COTTON) < 6) goto L_tanktop_insufficient_cloth;
+ if (zeny < 1000) goto L_tanktop_insufficient_zeny;
+ set zeny, zeny - 1000;
+ delitem @COTTON, 6;
+ getitem 688, 1;
+ mes "[Lora Tay the Seamstress]";
+ mes "After combining your pieces of cloth into one-- miraculously making the seams and stitches vanish-- the seamstress cuts out all that doesn't belong into a tank top, then folds and stabilises the edges with additional seam lines.";
+ mes "\"There you are. Don't worry, I have trimmed it to match your size perfectly.\"";
+ next;
+ goto L_tanktop_menu;
+
+L_tanktop_insufficient_cloth:
+ mes "[Lora Tay the Seamstress]";
+ mes "\"No, no, no, count again-- how much cloth did I say I needed? That's not enough.\"";
+ next;
+ goto L_tanktop_menu;
+
+L_tanktop_insufficient_zeny:
+ mes "[Lora Tay the Seamstress]";
+ mes "As you note that you don't have enough GP on you, Lora rolls her eyes.";
+ mes "\"I don't work for free, you know. I already gave you a discounted peasant price.\"";
+ next;
+ goto L_main_menu;
+
+L_cape:
+ mes "[Lora Tay the Seamstress]";
+ mes "She shakes her head.";
+ mes "\"No capes. You're an adventurer, right? Do you want to get caught by a closing portcullis? Or strangled when your cape gets tangled in a tree? Or brought down by a mushroom stomping on your cape while you're trying to run away? No capes.\"";
+ next;
+
+ goto L_main_menu;
+
+L_robe:
+ mes "[Lora Tay the Seamstress]";
+ mes "\"A robe? Well, as long as you're not asking me to make it out of cotton...\"";
+ next;
+
+ if (countitem(@SILK_COCOON) == 0)
+ goto L_robe_nosilk;
+
+L_robe_menu:
+ menu "Here, I have some silk cocoons!", -,
+ "Here, I have some silk sheets!", L_robe_nosilk,
+ "Where can I find silk?", L_where_silk,
+ "How much silk do you need?", L_how_much_silk,
+ "Oh, never mind.", L_main_menu;
+
+ mes "[Lora Tay the Seamstress]";
+ mes "The seamstress stares at you as if you had gone out of your mind.";
+ mes "\"And what precisely do you expect me to do with silk cocoons? String them together in some baubly chain? Somehow remove the thread and spin and weave it so that some random person can have their robe?\"";
+ next;
+
+ menu "Will you trade cocoons for sheets?", -,
+ "Never mind.", L_main_menu;
+
+ mes "[Lora Tay the Seamstress]";
+ mes "Lora frowns.";
+ mes "\"It's not all that easy to get properly processed silk around here. Easier for me than for you, I admit...\"";
+ next;
+
+ mes "[Lora Tay the Seamstress]";
+ mes "She sighs.";
+ mes "\"All right, very well then. I have enough spare silk sheets right now, but you pay the silk processing for your cocoons.\"";
+ next;
+
+ mes "[Lora Tay the Seamstress]";
+ mes "\"Let's see... " + @ROBE_COCOONS_NR + " silk cocoons and " + @ROBE_ZENY + " GP should just about cover that.\"";
+ next;
+
+ menu "I'm not interested.", L_main_menu,
+ "Very well then, here you are.", -;
+
+ if (countitem(@SILK_COCOON) < @ROBE_COCOONS_NR)
+ goto L_robe_missing_cocoons;
+
+ if (zeny < @ROBE_ZENY)
+ goto L_robe_missing_zeny;
+
+ set zeny, zeny - @ROBE_ZENY;
+ delitem @SILK_COCOON, @ROBE_COCOONS_NR;
+ getitem @SILK_ROBE, 1;
+ mes "[Lora Tay the Seamstress]";
+ mes "The seamstress puts your cocoons and GP away, takes your measurements and pulls out several silk sheets. She asks you to stretch out your arms, then pins the silk sheets in place all over your body.";
+ next;
+
+ mes "[Lora Tay the Seamstress]";
+ mes "She proceeds to make a number of mysterious marks on the sheets with a charcoal pen. Meanwhile, your arms are getting tired, but you're afraid to lower them-- she used a lot of pins to put everything into place, and you lost track of where they went...";
+ next;
+
+ mes "[Lora Tay the Seamstress]";
+ mes "\"Splendid.\"";
+ mes "After removing the sheets (and pins!), she picks up a pair of scissors and plows through the cloth at her usual amazing pace, only stopping briefly to sew together parts here and there.";
+ next;
+
+ mes "[Lora Tay the Seamstress]";
+ mes "She then treats the seams with some odorless liquid, making them vanish completely. Finally she hands you the finished robe.";
+ mes "\"Here you are now, this will fit. And don't you dare tell anyone that I did this! I'm not about to start a silk cocoon collection!\"";
+ next;
+
+ goto L_main_menu;
+
+L_robe_missing_cocoons:
+ mes "[Lora Tay the Seamstress]";
+ mes "\"" + @ROBE_COCOONS_NR + " cocoons is what I said, not " + countitem(@SILK_COCOON) + ".";
+ mes @ROBE_COCOONS_NR + " is " + (@ROBE_COCOONS_NR / 10) + " as many times as you have fingers, in case that helps.\"";
+ next;
+ goto L_main_menu;
+
+L_robe_missing_zeny:
+ mes "[Lora Tay the Seamstress]";
+ mes "\"No, no no. The way this works is that you give me the GP first and I give you the robe afterwards. You're " + (@ROBE_ZENY - zeny) + " GP short, so come back when you can afford the robe!\"";
+ next;
+ goto L_main_menu;
+
+L_where_silk:
+ mes "[Lora Tay the Seamstress]";
+ mes "\"Oh, Hetchel on the Tulimshar Marketplace can weave them for you.\"";
+ next;
+ mes "[Lora Tay the Seamstress]";
+ mes "She hesitates.";
+ mes "\"I didn't see her there the last time I visited, though. She may be visiting family. Tough luck.\"";
+ next;
+ goto L_robe_menu;
+
+L_how_much_silk:
+ mes "[Lora Tay the Seamstress]";
+ mes "\"Six sheets should do fine, if they're the usual double-elbow squares.\"";
+ next;
+ goto L_robe_menu;
+
+L_robe_nosilk:
+ mes "[Lora Tay the Seamstress]";
+ mes "\"What is that? You don't have any silk? Well, you're out of luck, I would say. I shan't make one out of those cotton rags; you might as well be wearing an apple sack.\"";
+ next;
+ goto L_main_menu;
+
+L_end:
+ close;
+
+
+
+// Input: @items (array of items you want to choose from)
+// @item_names (names of the items in @items)
+// @items_nr (number of entries in @items)
+// @default_choice$ (default option)
+// Return: @item (The selected item, or 0 if the default/something invalid was chosen)
+SUB_pick_one_of_many_items:
+ set @c, 0;
+ set @i, 0;
+
+ setarray @choice_n$, "", "", "", "", "", "", "", "",
+ "", "", "", "", "", "", "", "",
+ "", "", "", "", "", "", "", "",
+ "", "", "", "", "", "", "", "";
+
+L_SUB_pick_choice_loop:
+ if (@i >= @items_nr) goto L_SUB_choice_init_done;
+ set @current, @items[@i];
+ set @current_name$, @item_names$[@i];
+ set @i, @i + 1;
+
+ if (countitem(@current) == 0) goto L_SUB_pick_choice_loop;
+ set @choice_v[@c], @current;
+ set @choice_n$[@c], @current_name$;
+ set @c, @c + 1;
+ goto L_SUB_pick_choice_loop;
+
+L_SUB_choice_init_done:
+ set @choice_v[@c], 0;
+ set @choice_n$[@c], @default_choice$;
+ set @c, @c + 1;
+
+ if (@c < 10)
+ menu @choice_n$[0], -,
+ @choice_n$[1], -,
+ @choice_n$[2], -,
+ @choice_n$[3], -,
+ @choice_n$[4], -,
+ @choice_n$[5], -,
+ @choice_n$[6], -,
+ @choice_n$[7], -,
+ @choice_n$[8], -,
+ @choice_n$[9], -;
+ if (@c < 10) goto L_SUB_choice_join;
+
+ if (@c < 20)
+ menu @choice_n$[0], -,
+ @choice_n$[1], -,
+ @choice_n$[2], -,
+ @choice_n$[3], -,
+ @choice_n$[4], -,
+ @choice_n$[5], -,
+ @choice_n$[6], -,
+ @choice_n$[7], -,
+ @choice_n$[8], -,
+ @choice_n$[9], -,
+ @choice_n$[10], -,
+ @choice_n$[11], -,
+ @choice_n$[12], -,
+ @choice_n$[13], -,
+ @choice_n$[14], -,
+ @choice_n$[15], -,
+ @choice_n$[16], -,
+ @choice_n$[17], -,
+ @choice_n$[18], -,
+ @choice_n$[19], -;
+ if (@c < 20) goto L_SUB_choice_join;
+
+ menu @choice_n$[0], -,
+ @choice_n$[1], -,
+ @choice_n$[2], -,
+ @choice_n$[3], -,
+ @choice_n$[4], -,
+ @choice_n$[5], -,
+ @choice_n$[6], -,
+ @choice_n$[7], -,
+ @choice_n$[8], -,
+ @choice_n$[9], -,
+ @choice_n$[10], -,
+ @choice_n$[11], -,
+ @choice_n$[12], -,
+ @choice_n$[13], -,
+ @choice_n$[14], -,
+ @choice_n$[15], -,
+ @choice_n$[16], -,
+ @choice_n$[17], -,
+ @choice_n$[18], -,
+ @choice_n$[19], -,
+ @choice_n$[20], -,
+ @choice_n$[21], -,
+ @choice_n$[22], -,
+ @choice_n$[23], -,
+ @choice_n$[24], -,
+ @choice_n$[25], -,
+ @choice_n$[26], -,
+ @choice_n$[27], -,
+ @choice_n$[28], -,
+ @choice_n$[29], -,
+ @choice_n$[30], -,
+ @choice_n$[31], -;
+
+L_SUB_choice_join:
+ set @menu, @menu - 1;
+ set @item, @choice_v[@menu];
+ if (@menu >= @c) set @item, 0;
+
+ return;
+}
+
diff --git a/npc/dimonds-cove/passages.txt b/npc/new_23-1-dimonds-cove/passages.txt
index 5d9fcc8b..5d9fcc8b 100644
--- a/npc/dimonds-cove/passages.txt
+++ b/npc/new_23-1-dimonds-cove/passages.txt
diff --git a/npc/new_23-1-dimonds-cove/workers.txt b/npc/new_23-1-dimonds-cove/workers.txt
new file mode 100644
index 00000000..5579dadd
--- /dev/null
+++ b/npc/new_23-1-dimonds-cove/workers.txt
@@ -0,0 +1,11 @@
+new_23-1.gat,23,70,0 script Josh 155,{
+ mes "[Josh]";
+ mes "\"We're working on getting the cellar pass open.\"";
+ close;
+}
+
+new_23-1.gat,39,75,0 script Zack 155,{
+ mes "[Zack]";
+ mes "\"My brother and I are fixing the cellar pass.\"";
+ close;
+}
diff --git a/npc/new_24-1-eastern-desert-mountain-passage/mika.txt b/npc/new_24-1-eastern-desert-mountain-passage/mika.txt
new file mode 100644
index 00000000..222accde
--- /dev/null
+++ b/npc/new_24-1-eastern-desert-mountain-passage/mika.txt
@@ -0,0 +1,8 @@
+new_24-1.gat,39,27,0 script Mika 114,{
+ mes "[Mika]";
+ mes "\"My father told me about a man living in this desert who makes clothes out of snake skin.\"";
+ next;
+ mes "[Mika]";
+ mes "\"Maybe you can find him, but be careful you don't get lost in the tunnels!\"";
+ close;
+}
diff --git a/npc/new_24-1-eastern-desert-mountain-passage/monsters.txt b/npc/new_24-1-eastern-desert-mountain-passage/monsters.txt
new file mode 100644
index 00000000..649abc39
--- /dev/null
+++ b/npc/new_24-1-eastern-desert-mountain-passage/monsters.txt
@@ -0,0 +1,14 @@
+// Map: new_24-1
+// This is the Desert Mountains.
+//
+
+new_24-1.gat,0,0,0,0 monster MountainSnake 1026,60,0,0,Mob24::OnMountainSnake
+
+new_24-1.gat,0,0,0 script Mob24 -1,{
+OnMountainSnake:
+ set @mobID, 1026;
+ callfunc "MobPoints";
+ break;
+
+ end;
+}
diff --git a/npc/new_24-1-eastern-desert-mountain-passage/pachua.txt b/npc/new_24-1-eastern-desert-mountain-passage/pachua.txt
new file mode 100644
index 00000000..a40c652c
--- /dev/null
+++ b/npc/new_24-1-eastern-desert-mountain-passage/pachua.txt
@@ -0,0 +1,194 @@
+new_24-1.gat,23,100,0 script Pachua 143,{
+
+ set @LEATHER_PATCH, 708;
+ set @SNAKE_SKIN, 641;
+
+ set @LEATHER_PATCH_PRICE, 300;
+
+ set @wants_leather_patch, QUEST_Forestbow_state & NIBBLE_4_MASK;
+
+ mes "[Chief Pachua]";
+ mes "\"How!\"";
+ next;
+
+ if (getequipid(equip_head) == 643 || getequipid(equip_head) == 644) goto L_WearingCowboy;
+ if (getequipid(equip_legs) == 642) goto L_WearingChaps;
+
+ mes "[Chief Pachua]";
+ mes "\"For generations my tribe has been crafting special clothes out of different items.\"";
+ next;
+
+L_Check_Shops:
+ if((countitem(610) > 0 && countitem(@SNAKE_SKIN) > 9) && (countitem(524) > 0 && countitem(@SNAKE_SKIN) > 1)) goto L_Super_store;
+ if(countitem(610) > 0 && countitem(@SNAKE_SKIN) > 9) goto L_Chaps_store;
+ if(countitem(524) > 0 && countitem(@SNAKE_SKIN) > 1) goto L_Cowboy_store;
+
+ mes "[Chief Pachua]";
+ mes "\"Maybe if you bring me the right materials I can make something for you.\"";
+ next;
+
+ if (@wants_leather_patch)
+ menu "Wait, can you make a leather patch for me?", L_leather_patch,
+ "OK, bye.", -;
+
+ close;
+
+L_CheckStuff:
+ mes "[Chief Pachua]";
+ mes "\"Let me see what you have there.\"";
+ next;
+ return;
+
+L_Super_store:
+ callsub L_CheckStuff;
+ mes "[Chief Pachua]";
+ mes "\"Ahh you have lots of good items to work with.\"";
+ mes "";
+ mes "\"With them I can make you either";
+ mes "a Cowboy hat or Snake Skin Chaps\"";
+ next;
+ if (@wants_leather_patch)
+ menu
+ "Cowboy hat, please.", L_BuyCowboy,
+ "Snake Skin Chaps sound good.", L_BuyChaps,
+ "Can you make a leather patch?", L_leather_patch,
+ "Not now, maybe later.", L_NoDeal;
+ if (!@wants_leather_patch)
+ menu
+ "Cowboy hat, please.", L_BuyCowboy,
+ "Snake Skin Chaps sound good.", L_BuyChaps,
+ "Not now, maybe later.", L_NoDeal;
+
+L_Cowboy_store:
+ callsub L_CheckStuff;
+ mes "[Chief Pachua]";
+ mes "\"To make you a Cowboy hat I will need:";
+ mes "1 Fancy hat";
+ mes "2 Snake skins";
+ mes "5.000 GP\"";
+ mes "";
+ mes "\"Do we have a deal?\"";
+ next;
+ if (@wants_leather_patch)
+ menu
+ "Yes, that's fine.", L_BuyCowboy,
+ "Can you make a leather patch?", L_leather_patch,
+ "On second thought, maybe later.", L_NoDeal;
+ if (!@wants_leather_patch)
+ menu
+ "Yes, that's fine.", L_BuyCowboy,
+ "On second thought, maybe later.", L_NoDeal;
+
+L_Chaps_store:
+ callsub L_CheckStuff;
+ mes "[Chief Pachua]";
+ mes "\"To make you a pair of Snake Skin Chaps I will need:";
+ mes "1 Jeans Shorts";
+ mes "10 Snake skins";
+ mes "10.000 GP\"";
+ mes "";
+ mes "\"Do we have a deal?\"";
+ next;
+ if (!@wants_leather_patch)
+ menu
+ "Yes, that's fine.", L_BuyChaps,
+ "On second thought, maybe later.", L_NoDeal;
+ if (@wants_leather_patch)
+ menu
+ "Yes, that's fine.", L_BuyChaps,
+ "Can you make a leather patch?", L_leather_patch,
+ "On second thought, maybe later.", L_NoDeal;
+
+L_BuyChaps:
+ if (zeny < 10000) goto L_NoMoney;
+ if (countitem(610) < 1) goto L_NoJeans;
+ if (countitem(@SNAKE_SKIN) < 10) goto L_NoSkin;
+ set zeny, zeny - 10000;
+ delitem @SNAKE_SKIN, 10;
+ delitem 610, 1;
+ getitem 642, 1;
+ goto L_DealDone;
+
+L_BuyCowboy:
+ if (zeny < 5000) goto L_NoMoney;
+ if (countitem(524) < 1) goto L_NoFancy;
+ if (countitem(@SNAKE_SKIN) < 2) goto L_NoSkin;
+ set zeny, zeny - 5000;
+ delitem @SNAKE_SKIN, 2;
+ delitem 524, 1;
+ set @temp,rand(2);
+ if(@temp == 0) goto L_Cowboy_white;
+ goto L_Cowboy_black;
+
+L_Cowboy_white:
+ getitem 643, 1;
+ goto L_DealDone;
+
+L_Cowboy_black:
+ getitem 644, 1;
+ goto L_DealDone;
+
+L_leather_patch:
+ mes "[Chief Pachua]";
+ mes "\"If you just want a piece of leather, then yes, I can make that. Bring me a snake skin and " + @LEATHER_PATCH_PRICE + " GP.\"";
+ next;
+
+ menu "Here you are.", -,
+ "OK, I'll be back later.", L_end,
+ "That's too expensive!.", L_NoDeal;
+
+ if (countitem(@SNAKE_SKIN) < 1) goto L_NoSkins;
+ if (zeny < @LEATHER_PATCH_PRICE) goto L_NoMoney;
+
+ set zeny, zeny - @LEATHER_PATCH_PRICE;
+ delitem @SNAKE_SKIN, 1;
+ getitem @LEATHER_PATCH, 1;
+ goto L_DealDone;
+
+L_DealDone:
+ mes "[Chief Pachua]";
+ mes "\"Here you are!\"";
+ mes "";
+ mes "\"Come back any time.\"";
+ close;
+
+L_NoDeal:
+ mes "[Chief Pachua]";
+ mes "\"Alright, but you wont get a better deal anywhere else!\"";
+ close;
+
+L_NoMoney:
+ mes "[Chief Pachua]";
+ mes "\"Oh dear, it seems you don't have enough money.\"";
+ close;
+
+L_NoJeans:
+ mes "[Chief Pachua]";
+ mes "\"Oh dear, it seems you don't have enough jeans shorts.\"";
+ close;
+
+L_NoFancy:
+ mes "[Chief Pachua]";
+ mes "\"Oh dear, it seems you don't have enough fancy hats.\"";
+ close;
+
+L_NoSkins:
+ mes "[Chief Pachua]";
+ mes "\"Oh dear, it seems you don't have enough snake skins.\"";
+ close;
+
+L_WearingCowboy:
+ mes "[Chief Pachua]";
+ mes "\"Ah, I see that you are wearing a hat made with the ancient methods of my tribe.\"";
+ next;
+ goto L_Check_Shops;
+
+L_WearingChaps:
+ mes "[Chief Pachua]";
+ mes "\"Ah, I see that you are wearing pants made by my tribe.\"";
+ next;
+ goto L_Check_Shops;
+
+L_end:
+ close;
+}
diff --git a/npc/new_24-1-eastern-desert-mountain-passage/passages.txt b/npc/new_24-1-eastern-desert-mountain-passage/passages.txt
new file mode 100644
index 00000000..ae6d5a01
--- /dev/null
+++ b/npc/new_24-1-eastern-desert-mountain-passage/passages.txt
@@ -0,0 +1,32 @@
+new_24-1.gat,19,32 warp toEastDesert 0,0,new_7-1.gat,160,101
+new_24-1.gat,20,31 warp toEastDesert 0,0,new_7-1.gat,161,100
+new_24-1.gat,21,30 warp toEastDesert 0,0,new_7-1.gat,162,99
+new_24-1.gat,22,29 warp toEastDesert 0,0,new_7-1.gat,163,98
+new_24-1.gat,23,28 warp toEastDesert 0,0,new_7-1.gat,164,97
+new_24-1.gat,24,27 warp toEastDesert 0,0,new_7-1.gat,165,96
+new_24-1.gat,25,26 warp toEastDesert 0,0,new_7-1.gat,166,95
+new_24-1.gat,26,25 warp toEastDesert 0,0,new_7-1.gat,167,94
+new_24-1.gat,27,24 warp toEastDesert 0,0,new_7-1.gat,168,93
+new_24-1.gat,28,23 warp toEastDesert 0,0,new_7-1.gat,169,92
+new_24-1.gat,29,22 warp toEastDesert 0,0,new_7-1.gat,170,91
+new_24-1.gat,30,21 warp toEastDesert 0,0,new_7-1.gat,171,90
+new_24-1.gat,31,20 warp toEastDesert 0,0,new_7-1.gat,172,89
+new_24-1.gat,40,26 warp toMountainCave 0,0,new_25-1.gat,40,27
+new_24-1.gat,55,27 warp toMountainCave 0,0,new_25-1.gat,55,28
+new_24-1.gat,62,30 warp toMountainCave 0,0,new_25-1.gat,62,31
+new_24-1.gat,86,24 warp toMountainCave 0,0,new_25-1.gat,86,25
+new_24-1.gat,91,24 warp toMountainCave 0,0,new_25-1.gat,91,25
+new_24-1.gat,122,24 warp toMountainCave 0,0,new_25-1.gat,122,25
+new_24-1.gat,77,44 warp toMountainCave 0,0,new_25-1.gat,77,45
+new_24-1.gat,104,44 warp toMountainCave 0,0,new_25-1.gat,104,45
+new_24-1.gat,114,49 warp toMountainCave 0,0,new_25-1.gat,114,50
+new_24-1.gat,110,56 warp toMountainCave 0,0,new_25-1.gat,110,57
+new_24-1.gat,125,59 warp toMountainCave 0,0,new_25-1.gat,125,60
+new_24-1.gat,60,58 warp toMountainCave 0,0,new_25-1.gat,60,69
+new_24-1.gat,92,63 warp toMountainCave 0,0,new_25-1.gat,92,64
+new_24-1.gat,112,74 warp toMountainCave 0,0,new_25-1.gat,112,75
+new_24-1.gat,51,90 warp toMountainCave 0,0,new_25-1.gat,51,91
+new_24-1.gat,74,90 warp toMountainCave 0,0,new_25-1.gat,74,91
+new_24-1.gat,38,121 warp toMountainCave 0,0,new_25-1.gat,38,122
+new_24-1.gat,79,120 warp toMountainCave 0,0,new_25-1.gat,79,121
+new_24-1.gat,121,110 warp toMountainCave 0,0,new_25-1.gat,121,111
diff --git a/npc/new_25-1-eastern-desert-cave/monsters.txt b/npc/new_25-1-eastern-desert-cave/monsters.txt
new file mode 100644
index 00000000..b24d2e7c
--- /dev/null
+++ b/npc/new_25-1-eastern-desert-cave/monsters.txt
@@ -0,0 +1,14 @@
+// Map: new_25-1
+// This is the Desert Mountains Caves.
+//
+
+new_25-1.gat,0,0,0,0 monster MountainSnake 1026,50,0,0,Mob25::OnMountainSnake
+
+new_25-1.gat,0,0,0 script Mob25 -1,{
+OnMountainSnake:
+ set @mobID, 1026;
+ callfunc "MobPoints";
+ break;
+
+ end;
+}
diff --git a/npc/new_25-1-eastern-desert-cave/passages.txt b/npc/new_25-1-eastern-desert-cave/passages.txt
new file mode 100644
index 00000000..9fc66eff
--- /dev/null
+++ b/npc/new_25-1-eastern-desert-cave/passages.txt
@@ -0,0 +1,19 @@
+new_25-1.gat,40,26 warp toMountainPass 0,0,new_24-1.gat,40,27
+new_25-1.gat,55,27 warp toMountainPass 0,0,new_24-1.gat,55,28
+new_25-1.gat,62,30 warp toMountainPass 0,0,new_24-1.gat,62,31
+new_25-1.gat,86,24 warp toMountainPass 0,0,new_24-1.gat,86,25
+new_25-1.gat,91,24 warp toMountainPass 0,0,new_24-1.gat,91,25
+new_25-1.gat,122,24 warp toMountainPass 0,0,new_24-1.gat,122,25
+new_25-1.gat,77,44 warp toMountainPass 0,0,new_24-1.gat,77,45
+new_25-1.gat,104,44 warp toMountainPass 0,0,new_24-1.gat,104,45
+new_25-1.gat,114,49 warp toMountainPass 0,0,new_24-1.gat,114,50
+new_25-1.gat,110,56 warp toMountainPass 0,0,new_24-1.gat,110,57
+new_25-1.gat,125,59 warp toMountainPass 0,0,new_24-1.gat,125,60
+new_25-1.gat,60,68 warp toMountainPass 0,0,new_24-1.gat,60,59
+new_25-1.gat,92,63 warp toMountainPass 0,0,new_24-1.gat,92,64
+new_25-1.gat,112,74 warp toMountainPass 0,0,new_24-1.gat,112,75
+new_25-1.gat,51,90 warp toMountainPass 0,0,new_24-1.gat,51,91
+new_25-1.gat,74,90 warp toMountainPass 0,0,new_24-1.gat,74,91
+new_25-1.gat,38,121 warp toMountainPass 0,0,new_24-1.gat,38,122
+new_25-1.gat,79,120 warp toMountainPass 0,0,new_24-1.gat,79,121
+new_25-1.gat,121,110 warp toMountainPass 0,0,new_24-1.gat,121,111
diff --git a/npc/new_26-1-hill1/monsters.txt b/npc/new_26-1-hill1/monsters.txt
new file mode 100644
index 00000000..20c2376c
--- /dev/null
+++ b/npc/new_26-1-hill1/monsters.txt
@@ -0,0 +1,52 @@
+// Map: new_26-1
+// This is North Woodland.
+//
+
+new_26-1.gat,0,0,0,0 monster Mouboo 1028,25,0,0,Mob26::OnMouboo
+new_26-1.gat,0,0,0,0 monster SpikyMushroom 1019,30,0,0,Mob26::OnSpikyMushroom
+
+new_26-1.gat,0,0,0,0 monster Alizarin 1032,1,2700000,1800000,Mob26::OnAlizarin
+new_26-1.gat,0,0,0,0 monster Gamboge 1031,1,2700000,1800000,Mob26::OnGamboge
+new_26-1.gat,0,0,0,0 monster Cobalt 1030,1,2700000,1800000,Mob26::OnCobalt
+new_26-1.gat,0,0,0,0 monster Mauve 1029,1,2700000,1800000,Mob26::OnMauve
+
+new_26-1.gat,0,0,0,0 monster SilkWorm 1035,5,6000,3000,Mob26::OnSilkWorm
+
+new_26-1.gat,0,0,0 script Mob26 -1,{
+OnMouboo:
+ set @mobID, 1028;
+ callfunc "MobPoints";
+ break;
+
+OnSpikyMushroom:
+ set @mobID, 1019;
+ callfunc "MobPoints";
+ break;
+
+OnAlizarin:
+ set @mobID, 1032;
+ callfunc "MobPoints";
+ break;
+
+OnGamboge:
+ set @mobID, 1031;
+ callfunc "MobPoints";
+ break;
+
+OnCobalt:
+ set @mobID, 1030;
+ callfunc "MobPoints";
+ break;
+
+OnMauve:
+ set @mobID, 1029;
+ callfunc "MobPoints";
+ break;
+
+OnSilkWorm:
+ set @mobID, 1035;
+ callfunc "MobPoints";
+ break;
+
+ end;
+}
diff --git a/npc/new_26-1-hill1/passages.txt b/npc/new_26-1-hill1/passages.txt
new file mode 100644
index 00000000..cce370a0
--- /dev/null
+++ b/npc/new_26-1-hill1/passages.txt
@@ -0,0 +1,11 @@
+new_26-1.gat,132,164 warp south 2,0,new_9-1.gat,72,16
+new_26-1.gat,98,99 warp lowtunnel1 0,0,new_27-1.gat,36,81
+new_26-1.gat,109,92 warp hightunnel1 0,0,new_27-1.gat,79,73
+new_26-1.gat,123,90 warp npccave 0,0,new_27-1.gat,38,156
+new_26-1.gat,92,104 warp lowtunnel2 0,0,new_27-1.gat,270,111
+new_26-1.gat,65,126 warp hightunnel2 0,0,new_27-1.gat,176,139
+new_26-1.gat,44,88 warp starttunnel3 0,0,new_27-1.gat,354,187
+new_26-1.gat,41,48 warp realhightunnel3 0,0,new_27-1.gat,353,78
+new_26-1.gat,51,39 warp high1tunnel3 0,0,new_27-1.gat,370,45
+new_26-1.gat,148,67 warp high2tunnel3 0,0,new_27-1.gat,475,104
+new_26-1.gat,150,59 warp map26to28 0,4,new_28-1.gat,21,75
diff --git a/npc/new_26-1-hill1/shops.txt b/npc/new_26-1-hill1/shops.txt
new file mode 100644
index 00000000..4e2ce96e
--- /dev/null
+++ b/npc/new_26-1-hill1/shops.txt
@@ -0,0 +1,3 @@
+//
+
+new_26-1.gat,36,99,0 shop Blossom 163,661:100,664:100,665:50,662:100,667:50,663:100,671:75,673:25,669:75,672:25,674:25
diff --git a/npc/new_27-1-hill2/monsters.txt b/npc/new_27-1-hill2/monsters.txt
new file mode 100644
index 00000000..2121f594
--- /dev/null
+++ b/npc/new_27-1-hill2/monsters.txt
@@ -0,0 +1,20 @@
+// Map: new_27-1
+// This is the Caves beneath the North Woodland.
+//
+
+new_27-1.gat,0,0,0,0 monster Bat 1017,100,0,0,Mob27::OnBat
+new_27-1.gat,0,0,0,0 monster CaveSnake 1021,75,0,0,Mob27::OnCaveSnake
+
+new_27-1.gat,0,0,0 script Mob27 -1,{
+OnBat:
+ set @mobID, 1017;
+ callfunc "MobPoints";
+ break;
+
+OnCaveSnake:
+ set @mobID, 1021;
+ callfunc "MobPoints";
+ break;
+
+ end;
+}
diff --git a/npc/new_27-1-hill2/passages.txt b/npc/new_27-1-hill2/passages.txt
new file mode 100644
index 00000000..d2b918c8
--- /dev/null
+++ b/npc/new_27-1-hill2/passages.txt
@@ -0,0 +1,9 @@
+new_27-1.gat,36,83 warp lowerexit 1,0,new_26-1.gat,98,100
+new_27-1.gat,79,75 warp higherexit 1,0,new_26-1.gat,109,93
+new_27-1.gat,38,157 warp caveexit 1,0,new_26-1.gat,123,91
+new_27-1.gat,270,112 warp lowerexit 0,1,new_26-1.gat,92,105
+new_27-1.gat,176,138 warp higherexit 0,0,new_26-1.gat,65,127
+new_27-1.gat,354,189 warp startexit 1,0,new_26-1.gat,44,89
+new_27-1.gat,353,80 warp realexit 1,0,new_26-1.gat,41,48
+new_27-1.gat,370,47 warp higher1exit 1,0,new_26-1.gat,51,40
+new_27-1.gat,474,104 warp higher2exit 0,1,new_26-1.gat,146,67
diff --git a/npc/new_28-1-hillwest/monsters.txt b/npc/new_28-1-hillwest/monsters.txt
new file mode 100644
index 00000000..98ea2946
--- /dev/null
+++ b/npc/new_28-1-hillwest/monsters.txt
@@ -0,0 +1,63 @@
+// Map: new_28-1
+// This is North-East Woodland.
+//
+
+new_28-1.gat,0,0,0,0 monster Mouboo 1028,5,0,0,Mob28::OnMouboo
+new_28-1.gat,0,0,0,0 monster SpikyMushroom 1019,15,0,0,Mob28::OnSpikyMushroom
+new_28-1.gat,0,0,0,0 monster Flower 1014,15,0,0,Mob28::OnFlower
+
+new_28-1.gat,0,0,0,0 monster Alizarin 1032,1,0,0,Mob28::OnAlizarin
+new_28-1.gat,0,0,0,0 monster Gamboge 1031,1,0,0,Mob28::OnGamboge
+new_28-1.gat,0,0,0,0 monster Cobalt 1030,1,0,0,Mob28::OnCobalt
+new_28-1.gat,0,0,0,0 monster Mauve 1029,1,0,0,Mob28::OnMauve
+
+new_28-1.gat,0,0,0,0 monster Alizarin 1032,2,2700000,1800000,Mob28::OnAlizarin
+new_28-1.gat,0,0,0,0 monster Gamboge 1031,2,2700000,1800000,Mob28::OnGamboge
+new_28-1.gat,0,0,0,0 monster Cobalt 1030,2,2700000,1800000,Mob28::OnCobalt
+new_28-1.gat,0,0,0,0 monster Mauve 1029,2,2700000,1800000,Mob28::OnMauve
+
+new_28-1.gat,0,0,0,0 monster SilkWorm 1035,4,6000,3000,Mob28::OnSilkWorm
+
+new_28-1.gat,0,0,0 script Mob28 -1,{
+OnMouboo:
+ set @mobID, 1028;
+ callfunc "MobPoints";
+ break;
+
+OnSpikyMushroom:
+ set @mobID, 1019;
+ callfunc "MobPoints";
+ break;
+
+OnFlower:
+ set @mobID, 1014;
+ callfunc "MobPoints";
+ break;
+
+OnAlizarin:
+ set @mobID, 1032;
+ callfunc "MobPoints";
+ break;
+
+OnGamboge:
+ set @mobID, 1031;
+ callfunc "MobPoints";
+ break;
+
+OnCobalt:
+ set @mobID, 1030;
+ callfunc "MobPoints";
+ break;
+
+OnMauve:
+ set @mobID, 1029;
+ callfunc "MobPoints";
+ break;
+
+OnSilkWorm:
+ set @mobID, 1035;
+ callfunc "MobPoints";
+ break;
+
+ end;
+}
diff --git a/npc/new_28-1-hillwest/passages.txt b/npc/new_28-1-hillwest/passages.txt
new file mode 100644
index 00000000..7c1b50cc
--- /dev/null
+++ b/npc/new_28-1-hillwest/passages.txt
@@ -0,0 +1,3 @@
+new_28-1.gat,20,74 warp map28to26 0,4,new_26-1.gat,148,60
+new_28-1.gat,45,21 warp map28to33 1,0,new_33-1.gat,46,104
+new_28-1.gat,43,90 warp map28to36 0,0,new_36-1.gat,63,41
diff --git a/npc/new_29-1-west-woodland/monsters.txt b/npc/new_29-1-west-woodland/monsters.txt
new file mode 100644
index 00000000..cf82eefb
--- /dev/null
+++ b/npc/new_29-1-west-woodland/monsters.txt
@@ -0,0 +1,69 @@
+// Map: new_29-1
+// This is West Woodland.
+//
+
+new_29-1.gat,0,0,0,0 monster Mouboo 1028,5,0,0,Mob29::OnMouboo
+new_29-1.gat,0,0,0,0 monster EvilMushroom 1013,15,0,0,Mob29::OnEvilMushroom
+new_29-1.gat,0,0,0,0 monster Flower 1014,25,0,0,Mob29::OnFlower
+new_29-1.gat,0,0,0,0 monster FireGoblin 1011,20,0,0,Mob29::OnFireGoblin
+
+new_29-1.gat,0,0,0,0 monster Alizarin 1032,1,0,0,Mob29::OnAlizarin
+new_29-1.gat,0,0,0,0 monster Gamboge 1031,1,0,0,Mob29::OnGamboge
+new_29-1.gat,0,0,0,0 monster Cobalt 1030,1,0,0,Mob29::OnCobalt
+new_29-1.gat,0,0,0,0 monster Mauve 1029,1,0,0,Mob29::OnMauve
+
+new_29-1.gat,0,0,0,0 monster Alizarin 1032,1,2700000,1800000,Mob29::OnAlizarin
+new_29-1.gat,0,0,0,0 monster Gamboge 1031,1,2700000,1800000,Mob29::OnGamboge
+new_29-1.gat,0,0,0,0 monster Cobalt 1030,1,2700000,1800000,Mob29::OnCobalt
+new_29-1.gat,0,0,0,0 monster Mauve 1029,1,2700000,1800000,Mob29::OnMauve
+
+new_29-1.gat,0,0,0,0 monster SilkWorm 1035,4,6000,3000,Mob29::OnSilkWorm
+
+new_29-1.gat,0,0,0 script Mob29 -1,{
+OnMouboo:
+ set @mobID, 1028;
+ callfunc "MobPoints";
+ break;
+
+OnEvilMushroom:
+ set @mobID, 1013;
+ callfunc "MobPoints";
+ break;
+
+OnFlower:
+ set @mobID, 1014;
+ callfunc "MobPoints";
+ break;
+
+OnFireGoblin:
+ set @mobID, 1011;
+ callfunc "MobPoints";
+ break;
+
+OnAlizarin:
+ set @mobID, 1032;
+ callfunc "MobPoints";
+ break;
+
+OnGamboge:
+ set @mobID, 1031;
+ callfunc "MobPoints";
+ break;
+
+OnCobalt:
+ set @mobID, 1030;
+ callfunc "MobPoints";
+ break;
+
+OnMauve:
+ set @mobID, 1029;
+ callfunc "MobPoints";
+ break;
+
+OnSilkWorm:
+ set @mobID, 1035;
+ callfunc "MobPoints";
+ break;
+
+ end;
+}
diff --git a/npc/new_29-1-west-woodland/passages.txt b/npc/new_29-1-west-woodland/passages.txt
new file mode 100644
index 00000000..8c8c68ed
--- /dev/null
+++ b/npc/new_29-1-west-woodland/passages.txt
@@ -0,0 +1,3 @@
+new_29-1.gat,109,90 warp map29to9 0,3,new_9-1.gat,31,60
+new_29-1.gat,93,58 warp map29to30low 0,0,new_30-1.gat,56,172
+new_29-1.gat,76,38 warp map29to30high 0,0,new_30-1.gat,35,33 \ No newline at end of file
diff --git a/npc/new_29-1-west-woodland/taro.txt b/npc/new_29-1-west-woodland/taro.txt
new file mode 100644
index 00000000..db6b4551
--- /dev/null
+++ b/npc/new_29-1-west-woodland/taro.txt
@@ -0,0 +1,74 @@
+
+// Woodland Taro
+
+new_29-1.gat,54,43,0 script Taro 114,{
+ if (getequipid(equip_head) == 511 || getequipid(equip_head) == 1206) goto L_Santa;
+ if (getequipid(equip_head) == 633) goto L_Elf;
+ if (getequipid(equip_head) == 628) goto L_NearElf;
+ if (getequipid(equip_head) == 1204) goto L_Antlers;
+ if (getequipid(equip_head) == 1205) goto L_Tree;
+
+ mes "[Taro]";
+ mes "\"I saw Santa Claus going up this road.";
+ mes "Will you help me following him?\"";
+ next;
+
+ menu
+ "Of course, I'll help you!", L_Warp,
+ "No, it's probably dangerous out there.", -;
+ close;
+
+L_Santa:
+ mes "[Taro]";
+ mes "\"SANTA! Will you take me to your workshop?\"";
+ next;
+
+ menu
+ "Of course!", L_Warp,
+ "No, getting there is too dangerous.", -;
+ close;
+
+L_Elf:
+ mes "[Taro]";
+ mes "\"Aren't you one of Santa's elves? Will you take me to him?\"";
+ next;
+
+ menu
+ "Yes", L_Warp,
+ "No. Santa is too busy.", -;
+ close;
+
+L_NearElf:
+ mes "[Taro]";
+ mes "\"Aren't you one of Santa's elves? Oh, you're not. Will you help me see him anyways?\"";
+ next;
+
+ menu
+ "Yes", L_Warp,
+ "No", -;
+ close;
+
+L_Antlers:
+ mes "[Taro]";
+ mes "\"Mister reindeer? Will you take me to Santa Clause?\"";
+ next;
+
+ menu
+ "Yes", L_Warp,
+ "No", -;
+ close;
+
+L_Tree:
+ mes "[Taro]";
+ mes "\"Oh Christmas tree, I wish I could go see Santa!\"";
+ next;
+
+ menu
+ "Let me take you", L_Warp,
+ "Sorry, I'm not a magic tree", -;
+ close;
+
+L_Warp:
+ warp "new_10-1.gat",56,61;
+ close;
+}
diff --git a/npc/new_29-1-west-woodland/wedding-officiator.txt b/npc/new_29-1-west-woodland/wedding-officiator.txt
new file mode 100644
index 00000000..93a27c6d
--- /dev/null
+++ b/npc/new_29-1-west-woodland/wedding-officiator.txt
@@ -0,0 +1,246 @@
+// Wedding officiator: Marriages and divorces
+
+new_29-1.gat,31,31,0 script Wedding Officiator 164,{
+
+ set @WEDDING_FEE, 100;
+ set @DIVORCE_FEE_PER_LEVEL, 500;
+ set @WEDDING_MIN_LEVEL, 32;
+
+ mes "[Wedding Officiator]";
+ mes "A young lady in a long, green dress is overseeing the park. As she notices you looking at her, she gives you a broad and happy smile.";
+ mes "\"Hi there! I'm Wendy, here for all your marriage needs!\"";
+ next;
+
+L_main:
+ if (getpartnerid2(0))
+ goto L_main_married;
+
+ menu "What exactly do you do?", L_explain_self,
+ "How do I get married?", L_explain_marriage,
+ "I would like to get married.", L_get_married;
+ close;
+
+L_explain_self:
+ mes "[Wedding Officiator]";
+ mes "\"I'm responsible for marriage and divorce proceedings. Every married couple must be registered, so I keep a looong list of couples and send that to the magistrates every now and then.\"";
+ next;
+ mes "[Wedding Officiator]";
+ mes "\"So if you have a sweetheart and the two of you are getting along particularly well, and you think that you are ready to make that big final step-- well, then come here and talk to me!\"";
+ next;
+ goto L_main;
+
+L_explain_marriage:
+ mes "[Wedding Officiator]";
+ mes "\"If you are sure that you are ready to get married, then first you come and talk to me here-- I need to register you, after all. You will first have to pay me a small fee of " + @WEDDING_FEE + " GP.\"";
+ next;
+ mes "[Wedding Officiator]";
+ mes "\"Both you and your partner must be at least " + @WEDDING_MIN_LEVEL + " levels of age, though; the law is very firm on that. But if all of that works out, I will give you two wedding rings for the ceremony.\"";
+ next;
+ mes "[Wedding Officiator]";
+ mes "\"To complete the marriage, each of you has to put on one of these rings, and you have to stand next to each other in the southern part of this park. Then one of you says `marry' and then the other person's name.\"";
+ next;
+ mes "[Wedding Officiator]";
+ mes "\"So if you would want to marry me, for example, you would say `marry Wendy'. Just like that. Your partner then has to decide whether he or she wants that. And if you both agree, then you're married!\"";
+ mes "She again smiles that broad smile of hers.";
+ next;
+ goto L_main;
+
+L_get_married:
+ if (zeny < @WEDDING_FEE)
+ goto L_too_poor;
+ if (BaseLevel < @WEDDING_MIN_LEVEL)
+ goto L_too_young;
+
+ mes "[Wedding Officiator]";
+ mes "Wendy's eyes are sparkling.";
+ mes "\"Wow. So you and your sweetheart are ready to take the big step, then?\"";
+ next;
+
+ menu "Yes, we are ready.", -,
+ "On second thought, perhaps not.", L_end;
+
+ mes "[Wedding Officiator]";
+ mes "She bounces.";
+ mes "\"That's so sweet! You must really love each other, then...?\"";
+ next;
+
+ menu "We certainly do.", -,
+ "Yes, of course.", -,
+ "Please get on with it.", -,
+ "Hmm. Let me think about this some more.", L_end;
+
+ mes "[Wedding Officiator]";
+ mes "Wendy blushes.";
+ mes "\"Sorry if I am asking so many questions, but I have to make sure, you see... rules and all. Where were we...\"";
+ next;
+
+ mes "[Wedding Officiator]";
+ mes "She composes herself again.";
+ mes "\"OK. Now, what vows you exchange precisely is your choice. But a marriage is really something that is meant to last. So please take a moment to think.\"";
+ next;
+
+ mes "[Wedding Officiator]";
+ mes "\"Is your partner really someone you are serious about, someone you want to be with even when things get nasty, someone whom you will stick your head out for no matter how bad things get?";
+ mes "And do both of you feel that you could spend the rest of your time in this mana world together?\"";
+ next;
+
+ menu "Yes.", -,
+ "YES.", -,
+ "Absolutely.", -,
+ "Yes. We love each other.", -,
+ "This is taking too long.", L_end,
+ "No.", L_end;
+
+ if (zeny < @WEDDING_FEE)
+ goto L_too_poor;
+ if (BaseLevel < @WEDDING_MIN_LEVEL)
+ goto L_too_young;
+
+ set zeny, zeny - @WEDDING_FEE;
+ getitem 702, 1;
+ getitem 702, 1;
+
+ mes "[Wedding Officiator]";
+ mes "Wendy collects the fee.";
+ mes "\"Okay... here are your wedding rings. Each of you has to have one. Put them on, stand next to each other in the southern part of this park and say `marry ...' and the name of your partner.";
+ mes "So your partner might just say `marry " + strcharinfo(0) + "' to marry you.\"";
+ next;
+
+ mes "[Wedding Officiator]";
+ mes "Wendy hesitates, then gives you a quick hug. There are tears are in her eyes.";
+ mes "\"Sorry, I always get a bit... emotional, I think... but I'm so happy for you!\"";
+ mes "She smiles wipes the tears from her eyes.";
+ next;
+
+ mes "[Wedding Officiator]";
+ mes "\"So... I wish you the very, very best, a wonderful and happy and successful marriage!\"";
+ mes "She smiles at you again.";
+ next;
+ close;
+
+L_end:
+ close;
+
+L_too_young:
+ mes "[Wedding Officiator]";
+ mes "Wendy looks at her notes, shaking her head; pain is evident in her eyes.";
+ mes "\"I'm really, really sorry-- I wish I could allow that, but you are still too young. You have to be at least " + @WEDDING_MIN_LEVEL + " levels of age.\"";
+ next;
+ close;
+
+L_too_poor:
+ mes "[Wedding Officiator]";
+ mes "\"Oh, this is so sad... you want to get married but don't have the money!\"";
+ mes "Wendy is visibly unhappy.";
+ mes "\"I wish I could help you, but the rules... you see... Well, I'm afraid that you will just have to come back when you have " + @WEDDING_FEE + " GP.\"";
+ next;
+ close;
+
+L_main_married:
+
+ mes "[Wedding Officiator]";
+ mes "\"I hope that you and your partner are doing well?\"";
+ next;
+
+ menu "We are very happy, thanks for asking!", L_farewell,
+ "Actually, things aren't so good...", L_talk_divorce;
+ close;
+
+L_farewell:
+ mes "[Wedding Officiator]";
+ mes "Wendy is beaming.";
+ mes "\"That's wonderful! Please do say `hi' to your spouse from me!\"";
+ next;
+ close;
+
+L_talk_divorce:
+ mes "[Wedding Officiator]";
+ mes "\"Oh... I am sorry to hear that. What's the problem, then?\"";
+ next;
+
+ menu "We don't love each other anymore.", L_nolove,
+ "My partner loves someone else.", L_partner_otherlove,
+ "I think I love someone else.", L_self_otherlove,
+ "We can't agree on who carries the loot.", L_loot;
+ close;
+
+L_nolove:
+ mes "[Wedding Officiator]";
+ mes "Wendy sighs.";
+ mes "\"I am really sorry to hear that. Have you tried talking to your partner? Tried some new dungeons? Solved some quests together?\"";
+ next;
+
+ mes "[Wedding Officiator]";
+ mes "\"I mean... I am sure that you have many things in common that you are not aware of. If you just do something new, perhaps you will learn something about each other that you will like?\"";
+ next;
+
+ menu "We tried that, it didn't work.", L_makesure_divorce,
+ "Perhaps we should give it another try.", -;
+ close;
+
+L_partner_otherlove:
+ mes "[Wedding Officiator]";
+ mes "Wendy frowns.";
+ mes "\"Are you really sure? Perhaps that other person is just a friend, or even if it isn't, perhaps it was just a small mistake on your partner's side... nobody is perfect, after all!\"";
+ next;
+
+ menu "I'm sure. I want a divorce.", L_makesure_divorce,
+ "Perhaps we should discuss this some more first.", -;
+ close;
+
+L_self_otherlove:
+ mes "[Wedding Officiator]";
+ mes "Wendy sighs.";
+ mes "\"Oh dear... well, I suppose that happens. You don't have any children, I think, but still, you made a promise to your partner.\"";
+ next;
+ mes "[Wedding Officiator]";
+ mes "\"Are you really sure that you love the new person so much that you want to leave your partner? Perhaps it would be good to take some time off first to make sure that you are not making a mistake here.\"";
+ next;
+
+ menu "I'm sure. I want a divorce.", L_makesure_divorce,
+ "Let me think about this more.", -;
+ close;
+
+L_loot:
+ mes "[Wedding Officiator]";
+ mes "Wendy blinks.";
+ mes "\"Err... have you thought about just splitting it up?\"";
+ next;
+
+ menu "No way. I want a divorce.", L_makesure_divorce,
+ "Oh... oh! But of course!", -;
+ close;
+
+L_makesure_divorce:
+ set @divorce_cost, @DIVORCE_FEE_PER_LEVEL * BaseLevel;
+
+ mes "[Wedding Officiator]";
+ mes "Resigned, Wendy looks down at her notes.";
+ mes "\"Okay. I suppose that if you are sure, I will get your divorce underway. But that will cost you " + @divorce_cost + " in administrative fees.\"";
+ next;
+
+ menu "Let me think about this again.", L_end,
+ "HOW much? Never mind, then.", L_end,
+ "That's OK. I want the divorce.", L_do_divorce;
+ close;
+
+L_divorce_nomoney:
+ mes "[Wedding Officiator]";
+ mes "\"I am sorry, but you can't seem to afford the " + @divorce_cost + " GP for a divorce at this time. Please come back later.\"";
+ next;
+ close;
+
+L_do_divorce:
+ if (zeny < @divorce_cost)
+ goto L_divorce_nomoney;
+
+ set zeny, zeny - @divorce_cost;
+ divorce;
+
+ mes "[Wedding Officiator]";
+ mes "After collecting her fee, Wendy licks her quill and writes down some notes.";
+ mes "Then she sighs heavily.";
+ mes "\"You are divorced now. Thank you for your business.\"";
+ next;
+ close;
+}
diff --git a/npc/new_3-1-tulimshar/banker.txt b/npc/new_3-1-tulimshar/banker.txt
new file mode 100644
index 00000000..9431f5cc
--- /dev/null
+++ b/npc/new_3-1-tulimshar/banker.txt
@@ -0,0 +1,4 @@
+new_3-1.gat,57,52,0 script Tybalt 107,{
+ set @npcName$, "Tybalt";
+ callfunc "Banker";
+}
diff --git a/npc/new_3-1-tulimshar/barber.txt b/npc/new_3-1-tulimshar/barber.txt
new file mode 100644
index 00000000..bd6b148e
--- /dev/null
+++ b/npc/new_3-1-tulimshar/barber.txt
@@ -0,0 +1,9 @@
+new_3-1.gat,53,38,0 script Nicolas 100,{
+ mes "[Nicolas the Barber]";
+ mes "\"Do you need a barber?\"";
+ next;
+ callfunc "Barber";
+ mes "[Nicolas the Barber]";
+ mes "\"Come again!\"";
+ close;
+}
diff --git a/npc/new_3-1-tulimshar/bard.txt b/npc/new_3-1-tulimshar/bard.txt
new file mode 100644
index 00000000..dcb56424
--- /dev/null
+++ b/npc/new_3-1-tulimshar/bard.txt
@@ -0,0 +1,10 @@
+//
+
+new_3-1.gat,50,44,0 script Bard 152,{
+ setarray @songs$, "\"There once was a bard, who had it hard, because a man in dark green, was very mean.\"",
+ "\"At Hurnscald inn, there was a person of fairest skin, declining wedding bands from quite a many hands.\"",
+ "\"As the Sun sets down in the forest's brown, she whom the fragrance holds counts her gold.\"";
+ set @id, rand(3);
+ mes @songs$[@id];
+ close;
+}
diff --git a/npc/new_3-1-tulimshar/bleacher.txt b/npc/new_3-1-tulimshar/bleacher.txt
new file mode 100644
index 00000000..6a15e273
--- /dev/null
+++ b/npc/new_3-1-tulimshar/bleacher.txt
@@ -0,0 +1,126 @@
+//
+
+new_3-1.gat,27,53,0 script Candide 156,{
+ mes "[Candide]";
+ mes "\"I've figured out how that volcanic ash bleaches cloth.";
+ mes "I could do it for you, but I'll need three piles of ash and 5,000 GP for supplies per item.\"";
+ next;
+
+ if (countitem(701) < 3) goto L_no_ash;
+
+ if (zeny < 5000) goto L_no_money;
+
+ menu "I'd like to bleach something", -,
+ "No thanks", L_close;
+
+L_bleach_menu:
+ mes "[Candide]";
+ mes "\"What would you like to bleach?\"";
+ next;
+
+ menu "Cotton shirt", L_cottonshirt,
+ "V-Neck sweater", L_vneck,
+ "Turtleneck sweater", L_tneck,
+ "Cotton shorts", L_shorts,
+ "Cotton skirt", L_skirt,
+ "Tank top ", L_tanktop,
+ "Short tank top", L_tanktop_short,
+ "Silk robe", L_robe,
+ "Nevermind", -;
+ goto L_close;
+
+L_cottonshirt: set @normal, 1202;
+ set @dyeBase, 2050;
+ goto L_choose_color;
+
+L_vneck: set @normal, 624;
+ set @dyeBase, 2060;
+ goto L_choose_color;
+
+L_tneck: set @normal, 564;
+ set @dyeBase, 2070;
+ goto L_choose_color;
+
+L_shorts: set @normal, 586;
+ set @dyeBase, 2110;
+ goto L_choose_color;
+
+L_skirt: set @normal, 632;
+ set @dyeBase, 2100;
+ goto L_choose_color;
+
+L_tanktop: set @normal, 688;
+ set @dyeBase, 2090;
+ goto L_choose_color;
+
+L_tanktop_short: set @normal, 689;
+ set @dyeBase, 2120;
+ goto L_choose_color;
+
+L_robe: set @normal, 720;
+ set @dyeBase, 2080;
+ goto L_choose_color;
+
+L_choose_color:
+ mes "[Candide]";
+ mes "\"And the color?\"";
+ next;
+
+ menu "Red", -,
+ "Green", -,
+ "Dark Blue", -,
+ "Yellow", -,
+ "Light Blue", -,
+ "Pink", -,
+ "Black", -,
+ "Orange", -,
+ "Purple", -,
+ "Dark Green", -;
+
+ set @del, @dyeBase + @menu - 1;
+
+ if (countitem(@del) == 0) goto L_no_item;
+
+ if (countitem(701) < 3) goto L_no_ash;
+
+ if (zeny < 5000) goto L_no_money;
+
+ delitem @del, 1;
+ getitem @normal, 1;
+ delitem 701, 3;
+ set zeny, zeny - 5000;
+
+L_again:
+ mes "[Candide]";
+ mes "\"Would you like to bleach something else?\"";
+ next;
+
+ menu "Yes", L_bleach_menu,
+ "No", L_close;
+
+L_no_item:
+ mes "[Candide]";
+ mes "\"You don't have one of those.\"";
+ next;
+
+ goto L_again;
+
+L_no_ash:
+ mes "[Candide]";
+ mes "\"You don't have enough ash for me to bleach anything.";
+ mes "I need three piles.\"";
+ next;
+
+ goto L_close;
+
+L_no_money:
+ mes "[Candide]";
+ mes "\"You don't have enough gold for me to bleach anything.";
+ mes "I need 5,000 GP for supplies.\"";
+ next;
+
+L_close:
+ mes "[Candide]";
+ mes "\"Come again.\"";
+ close;
+}
diff --git a/npc/new_3-1-tulimshar/children.txt b/npc/new_3-1-tulimshar/children.txt
new file mode 100644
index 00000000..40efb233
--- /dev/null
+++ b/npc/new_3-1-tulimshar/children.txt
@@ -0,0 +1,105 @@
+new_3-1.gat,94,27,0 script Aisha 108,{
+ set @TEMP,rand(9);
+ if(@TEMP == 0) goto L_1;
+ if(@TEMP == 1) goto L_1;
+ if(@TEMP == 2) goto L_2;
+ if(@TEMP == 3) goto L_3;
+ if(@TEMP == 4) goto L_4;
+ if(@TEMP == 5) goto L_5;
+ if(@TEMP == 6) goto L_6;
+ if(@TEMP == 7) goto L_7;
+ if(@TEMP == 8) goto L_8;
+
+L_1:
+ mes "[Aisha]";
+ mes "\"Maggots are soo slimey!\"";
+ close;
+
+L_2:
+ mes "[Aisha]";
+ mes "\"Want to play ball with me?\"";
+ close;
+
+L_3:
+ mes "[Aisha]";
+ mes "\"There are so many monsters; I hate scorpions!\"";
+ close;
+
+L_4:
+ mes "[Aisha]";
+ mes "\"When I grow up, I want to be strong enough to kill a scorpion!\"";
+ close;
+
+L_5:
+ mes "[Aisha]";
+ mes "\"Mommy told me that you can drop the things that monsters sell.\"";
+ close;
+
+L_6:
+ mes "[Aisha]";
+ mes "\"Have you tried to eat a roasted maggot? They are sooo yummy! And you feel much healthier afterwards, too!\"";
+ close;
+
+L_7:
+ mes "[Aisha]";
+ mes "\"I want to be a Doctor when i grow up!\"";
+ close;
+
+L_8:
+ mes "[Aisha]";
+ mes "\"That volcano was sooo scary! The earth was shaking and everything was breaking down... but now they have rebuilt everything.\"";
+ close;
+}
+
+new_3-1.gat,39,67,0 script Nina 103,{
+ set @TEMP,rand(8);
+ if(@TEMP == 0) goto L_1;
+ if(@TEMP == 1) goto L_1;
+ if(@TEMP == 2) goto L_2;
+ if(@TEMP == 3) goto L_3;
+ if(@TEMP == 4) goto L_4;
+ if(@TEMP == 5) goto L_5;
+ if(@TEMP == 6) goto L_6;
+ if(@TEMP == 7) goto L_7;
+ if(@TEMP == 8) goto L_8;
+
+L_1:
+ mes "[Nina]";
+ mes "\"If I learned anything from school, Grenxen founded Tulimshar.\"";
+ close;
+
+L_2:
+ mes "[Nina]";
+ mes "\"When I was picking rocks from the field, I saw a red scorpion.\"";
+ close;
+
+L_3:
+ mes "[Nina]";
+ mes "\"Its polite to state your name before talking to anyone.\"";
+ close;
+
+L_4:
+ mes "[Nina]";
+ mes "\"I have a Scorpion Doll!\"";
+ close;
+
+L_5:
+ mes "[Nina]";
+ mes "\"I always take some spare Cactus Juices with me on the field. They are heavy, though.\"";
+ close;
+
+L_6:
+ mes "[Nina]";
+ mes "\"When you are feeling bad, eating something can usually help you heal faster.\"";
+ close;
+
+L_7:
+ mes "[Nina]";
+ mes "\"Grenxen is the Demon that founded Tulimshar.\"";
+ close;
+
+L_8:
+ mes "[Nina]";
+ mes "That volcano eruption was terrifying; much of Tulimshar was destroyed. Fortunately the mayor had everything rebuilt quickly.";
+ close;
+}
diff --git a/npc/new_3-1-tulimshar/constable.txt b/npc/new_3-1-tulimshar/constable.txt
new file mode 100644
index 00000000..673ff0a0
--- /dev/null
+++ b/npc/new_3-1-tulimshar/constable.txt
@@ -0,0 +1,7 @@
+//
+
+new_3-1.gat,37,35,0 script Constable Perry Graf 150,{
+// set @npcName$, "Constable Perry Graf";
+ set @canSkip, 1;
+ callfunc "GameRules";
+}
diff --git a/npc/tulimshar/elanore.txt b/npc/new_3-1-tulimshar/elanore.txt
index 2158c315..cc474ca0 100644
--- a/npc/tulimshar/elanore.txt
+++ b/npc/new_3-1-tulimshar/elanore.txt
@@ -1,130 +1,88 @@
//Heal NPC costs 100 money
-new_3-1.gat,40,66,0 script Elanore 108,{
+new_3-1.gat,58,68,0 script Elanore 108,{
if (baselevel > 10) goto L_NoHeal;
- set @TEMP,rand(3);
+ set @TEMP,rand(4);
if(@TEMP == 0) goto Heal1;
-
if(@TEMP == 1) goto Heal2;
-
if(@TEMP == 2) goto Heal3;
-
if(@TEMP == 3) goto Heal4;
Heal1:
mes "[Elanore the Healer]";
-
- mes "You don't look too well, let me treat your wounds.";
-
+ mes "\"You don't look too well; let me treat your wounds.\"";
next;
-
goto Heal_L;
-
-
Heal2:
mes "[Elanore the Healer]";
-
- mes "I will make quick work of your wounds.";
-
+ mes "\"I will make quick work of your wounds.\"";
next;
-
goto Heal_L;
-
-
Heal3:
mes "[Elanore the Healer]";
-
- mes "Need a healing?.";
-
+ mes "\"Need a healing?\"";
next;
-
goto Heal_L;
-
-
Heal4:
mes "[Elanore the Healer]";
-
- mes "Sometimes you just need to run from battle.";
-
+ mes "\"Sometimes you just need to run from battle.\"";
next;
-
goto Heal_L;
-
-
Heal_L:
- if(@TEMP == 0) goto Heal_1;
+ set @TEMP,rand(3);
+ if(@TEMP == 0) goto Heal_1;
if(@TEMP == 1) goto Heal_2;
-
if(@TEMP == 2) goto Heal_3;
-
if(@TEMP == 3) goto Heal_4;
Heal_1:
mes "[Elanore the Healer]";
-
- mes "Here you go!";
-
+ mes "\"Here you go!\"";
heal 10000,10000;
-
close;
-
-
Heal_2:
mes "[Elanore the Healer]";
-
- mes "Painless wasnt it?";
-
- mes "Here you go!";
-
+ mes "\"Painless, wasn't it?";
+ mes "Here you go!\"";
heal 10000,10000;
-
close;
Heal_3:
mes "[Elanore the Healer]";
-
- mes "You should be more careful.";
-
+ mes "\"You should be more careful.\"";
heal 10000,10000;
-
close;
Heal_4:
mes "[Elanore the Healer]";
-
- mes "Much better right?!";
-
+ mes "\"Much better, right?!\"";
heal 10000,10000;
-
close;
L_NoHeal:
mes "[Elanore the Healer]";
-
- mes "I'm sorry but I'm here only to help young people.";
-
- mes "Your level is already higher than 10.";
-
- mes "You can get some rest in the inn near here.";
+ mes "\"I'm sorry but unless you are young and in need, I can't help you, and your level is already higher than ten.";
+ mes "With so many people still injured from the earthquake, I really have no time to help.";
+ mes "You can get some rest in the inn near here.\"";
close;
diff --git a/npc/new_3-1-tulimshar/guards.txt b/npc/new_3-1-tulimshar/guards.txt
new file mode 100644
index 00000000..158a00a1
--- /dev/null
+++ b/npc/new_3-1-tulimshar/guards.txt
@@ -0,0 +1,74 @@
+new_3-1.gat,48,79,0 script Ekinu 104,{
+ mes "[Ekinu the Town Guard]";
+ mes "\"What a disaster... I can't believe that we managed to rebuild the town so fast, though.\"";
+ next;
+ menu "Can you give me any tips?", L_Tip,
+ "Do you have information?", L_Info,
+ "What disaster?", L_disaster;
+
+L_Tip:
+ set @TEMP,rand(7);
+ if(@TEMP == 0) goto L_0;
+ if(@TEMP == 1) goto L_1;
+ if(@TEMP == 2) goto L_2;
+ if(@TEMP == 3) goto L_3;
+ if(@TEMP == 4) goto L_4;
+ if(@TEMP == 5) goto L_5;
+ if(@TEMP == 6) goto L_6;
+L_1:
+ mes "[Ekinu the Town Guard]";
+ mes "\"Try to carry spare food when on fields or in dungeons, they will come in handy. I always take beer, but don't tell the Sergeant...\"";
+ close;
+L_2:
+ mes "[Ekinu the Town Guard]";
+ mes "\"Always carry a map of where you are, ask the Guides in most towns to get one.\"";
+ close;
+L_3:
+ mes "[Ekinu the Town Guard]";
+ mes "\"When in a dungeon, monsters are more aggressive than if they were outside.\"";
+ close;
+L_4:
+ mes "[Ekinu the Town Guard]";
+ mes "\"When gambling for money in casinos, make sure you have enough emergency money.\"";
+ close;
+L_5:
+ mes "[Ekinu the Town Guard]";
+ mes "\"Never underestimate the enemy.\"";
+ close;
+L_6:
+ mes "[Ekinu the Town Guard]";
+ mes "\"When fighting more than one enemy, try to focus on one at a time.\"";
+ close;
+L_0:
+ mes "[Ekinu the Town Guard]";
+ mes "\"Let me think of something... Oh! Do NOT attack Red scorpions unless you can kill it for sure!\"";
+ close;
+
+L_Info:
+ mes "[Ekinu the Town Guard]";
+ mes "\"Everyone wants information... you won't get it, at least not here. I'm not even sure what you mean, to be honest.\"";
+ close;
+
+L_disaster:
+ mes "[Ekinu the Town Guard]";
+ mes "\"What do you mean, `what disaster'? Weren't you there? That huge huge volcano ex...rusion... whatever they call it, and the earthquake!\"";
+ next;
+
+ mes "[Ekinu the Town Guard]";
+ mes "\"Half the town was reduced to rubble! Somehow, no-one was seriously injured though, so I guess we were lucky...\"";
+ next;
+
+ mes "[Ekinu the Town Guard]";
+ mes "\"Well, the mayor rebuilt everything quickly, but I have no idea where he got the GP from...\"";
+ close;
+}
+
+new_3-1.gat,40,79,0 script Ryan 104,{
+ mes "[Ryan the Town Guard]";
+ mes "ZzzZzzZ...";
+ next;
+ mes "[Ryan the Town Guard]";
+ mes "\"Hmmmmmmh...?";
+ mes "Oh, I wasn't sleeping, I was just resting my eyes!\"";
+close;
+}
diff --git a/npc/new_3-1-tulimshar/guide.txt b/npc/new_3-1-tulimshar/guide.txt
new file mode 100644
index 00000000..b1458919
--- /dev/null
+++ b/npc/new_3-1-tulimshar/guide.txt
@@ -0,0 +1,162 @@
+new_3-1.gat,33,27,0 script Ian 102,{
+ if (TUT_var & 1 == 1 && TUT_var & 2 == 0 && BaseLevel >= 10) callsub S_Grad;
+ mes "[Ian the Guide]";
+ mes "\"Would you like to know about something?\"";
+ next;
+
+L_Menu_A:
+ menu "Fighting", L_Fight,
+ "Items", L_Items,
+ "Monsters", L_Monster,
+ "Stylist", L_Style,
+ "Quests", L_Quests,
+ "NPCs", L_NPC,
+ "Commands", L_Comm,
+ "Attributes", L_Stats,
+ "Magic", L_Magic,
+ "Quick Keys", L_Key,
+ "Laws", L_Laws,
+ "I know everything!", L_Know;
+ close;
+
+L_Fight:
+ mes "[Ian the Guide]";
+ mes "\"People live in this world by living off of monsters.";
+ mes "You can fight monsters and even players by hitting the [CTRL] key, or left mouse click.\"";
+ next;
+ mes "[Ian the Guide]";
+ mes "\"If you get tired of pressing the key too much, you can also type [SHIFT]+[CTRL].";
+ mes "This will make your character attack continuously for the time you are inactive.\"";
+ next;
+ goto L_Menu_A;
+
+L_Items:
+ mes "[Ian the Guide]";
+ mes "\"There are three types of items.";
+ mes "They can be Consumables, Equipment, or Miscellaneous\"";
+ next;
+ mes "[Ian the Guide]";
+ mes "\"Consumable items such as Potions, can be used only once.";
+ mes "After use, they will disappear from your inventory.\"";
+ next;
+ mes "[Ian the Guide]";
+ mes "\"Equipment items like Armors, Weapons, Accessories";
+ mes "can be equipped for fashionable purposes or to raise your status.\"";
+ next;
+ mes "[Ian the Guide]";
+ mes "\"Miscellaneous items such as maggot slime, are used";
+ mes "in creating other items, or just to trade and sell.\"";
+ next;
+ goto L_Menu_A;
+
+L_Monster:
+ mes "[Ian the Guide]";
+ mes "\"In every world, there are beasts. Monsters can be found almost anywhere!~";
+ mes "To fight them, please read [Fighting] if you do not know how.\"";
+ next;
+ mes "\"There a several types of monsters, Aggressive, Neutral, and Assistants.\"";
+ next;
+ mes "[Ian the Guide]";
+ mes "\"Aggressive monsters know that they are always in danger";
+ mes "so therefore they always keep their guard up,";
+ mes "making them attack anybody in sight.\"";
+ next;
+ mes "[Ian the Guide]";
+ mes "\"Neutral monsters tend to just lounge around until attacked.";
+ mes "They will leave everything alone unless they are threatened.\"";
+ next;
+ mes "[Ian the Guide]";
+ mes "\"Assistants are monsters who help each other.";
+ mes "You should always check how many are around you before attacking a single one!\"";
+ next;
+ goto L_Menu_A;
+
+L_Style:
+ mes "[Ian the Guide]";
+ mes "\"The stylist NPCs will cut and perm your hair!";
+ mes "They are known for their hair growth formula\"";
+ next;
+ goto L_Menu_A;
+
+L_Quests:
+ mes "[Ian the Guide]";
+ mes "\"There are people in the world in need of help!";
+ mes "Most of these people aren't afraid to give rewards to those who help them.";
+ mes "So be nice and help people along the way!\"";
+ next;
+ goto L_Menu_A;
+
+L_NPC:
+ mes "[Ian the Guide]";
+ mes "\"NPCs [Non Playable Characters] are people who are always in the game,";
+ mes "tending to many varieties of services from just chatting to helping others.\"";
+ next;
+ goto L_Menu_A;
+
+L_Comm:
+ mes "[Ian the Guide]";
+ mes "\"/clear clears the text box.\"";
+ mes "\"/help displays the client commands (ones starting with a /) in the chat box.\"";
+ mes "\"/whisper [name] allows you to message someone privately.\"";
+ mes "\"/who displays the current number of online users.\"";
+ mes "\"/where displays the current map's name.\"";
+ next;
+ goto L_Menu_A;
+
+L_Stats:
+ mes "[Ian the Guide]";
+ mes "\"People vary greatly by how much strength, agility, dexterity, intelligence, vitality, and luck they have.\"";
+ next;
+ mes "[Ian the Guide]";
+ mes "\"Strength helps you carry items, and it also allows you to hit harder-- but it is not too helpful if you focus on missile weapons.";
+ mes "More agility allows you to attack faster, and to dodge attacks more easily.";
+ mes "Your dexterity determines how likely you are to hit a monster, and how effective you are with missile weapons.\"";
+ next;
+ mes "[Ian the Guide]";
+ mes "\"Vitality determines how resistant to injuries you are, and how much damage you can take before you die.";
+ mes "Intelligence is useful for alchemy and magic, but there are few opportunities for either at the moment.";
+ mes "Luck determines many small things, but, to be honest, I don't think that it is very useful.\"";
+ next;
+ mes "[Ian the Guide]";
+ mes "\"I recommend that you practice your dexterity, since some of the more dangerous monsters are very hard to hit otherwise.";
+ mes "Don't bother trying to work on your luck, and your intelligence is probably not something anyone cares about either.\"";
+ next;
+ goto L_Menu_A;
+
+L_Magic:
+ mes "[Ian the Guide]";
+ mes "\"In decades past, there was a Mana Seed south of Tulimshar, from which people could draw magical energies. Unfortunately, the seed is gone.";
+ mes "Until we find a new Mana Seed, there will be no magic, except for those who already possess magical powers.\"";
+ next;
+ goto L_Menu_A;
+
+L_Key:
+ mes "[Ian the Guide]";
+ mes "\"There are many key combinations, press F1 for a short list of them!\"";
+ next;
+ goto L_Menu_A;
+
+L_Laws:
+ mes "[Ian the Guide]";
+ mes "\"Lady Platyna, the Overseer, has decreed the following rules:";
+ mes "1. Do not abuse others (insult, swear etc.)";
+ mes "2. No bots.";
+ mes "3. No spamming/flooding.";
+ mes "4. No begging.";
+ mes "5. Speak English.";
+ next;
+ goto L_Menu_A;
+
+L_Know:
+ close;
+
+S_Grad:
+ mes "[Ian the Guide]";
+ mes "\"Hey, you've been doing good, let me give you this.\"";
+ next;
+
+ getitem 675, 1;
+ set TUT_var, TUT_var | 2;
+
+ return;
+}
diff --git a/npc/new_3-1-tulimshar/man.txt b/npc/new_3-1-tulimshar/man.txt
new file mode 100644
index 00000000..f2638a51
--- /dev/null
+++ b/npc/new_3-1-tulimshar/man.txt
@@ -0,0 +1,22 @@
+new_3-1.gat,108,55,0 script Luca 102,{
+ mes "[Luca the Hunter]";
+ mes "\"Ouch! It hurts, this wound I got from battle.\"";
+ next;
+ menu "Tell me about it",L_Exp,"Nevermind",L_Nev;
+
+L_Exp:
+ mes "[Luca the Hunter]";
+ mes "\"I was fighting scorpions for experience and I bumped into a RED one. I had NEVER seen it before!\"";
+ next;
+ mes "[Luca the Hunter]";
+ mes "\"Luckily i had a camera with me! Here's a picture of it... Let me find it, I put it in my pocket somewhere...\"";
+ next;
+ mes "[Luca the Hunter]";
+ mes "\"Oh man! My pockets have been ripped clean off!\"";
+ close;
+
+L_Nev:
+ mes "[Luca the Hunter]";
+ mes "\"Hmpf!\"";
+ close;
+}
diff --git a/npc/new_3-1-tulimshar/merchant.txt b/npc/new_3-1-tulimshar/merchant.txt
new file mode 100644
index 00000000..186365d6
--- /dev/null
+++ b/npc/new_3-1-tulimshar/merchant.txt
@@ -0,0 +1 @@
+new_3-1.gat,39,52,0 shop Neko 101,501:50,502:60,1201:100,522:300,521:1000,656:250,1202:1000,523:8000,603:-1
diff --git a/npc/tulimshar/monster_guide.txt b/npc/new_3-1-tulimshar/monster_guide.txt
index 0b9972fa..3b2d8b6f 100644
--- a/npc/tulimshar/monster_guide.txt
+++ b/npc/new_3-1-tulimshar/monster_guide.txt
@@ -1,4 +1,4 @@
-new_3-1.gat,46,66,0 script Aidan 102,{
+new_3-1.gat,48,52,0 script Aidan 102,{
if(MPQUEST == 0) goto Register;
mes "[Aidan the Monster Guide]";
mes "You currently have " +Mobpt+ " Monster Points. These points are acquired while killing monsters";
diff --git a/npc/new_3-1-tulimshar/monsters.txt b/npc/new_3-1-tulimshar/monsters.txt
new file mode 100644
index 00000000..1a17628f
--- /dev/null
+++ b/npc/new_3-1-tulimshar/monsters.txt
@@ -0,0 +1,26 @@
+// Map: new_3-1
+// This is Tulimshar the city -- southern part with market and casino/inn.
+//
+
+new_3-1.gat,0,0,0,0 monster Maggot 1002,35,2000,0,Mob3::OnMaggot
+new_3-1.gat,0,0,0,0 monster Scorpion 1003,25,2500,0,Mob3::OnScorpion
+new_3-1.gat,0,0,0,0 monster Firegoblin 1011,20,2500,0,Mob3::OnFireGoblin
+
+new_3-1.gat,0,0,0 script Mob3 -1,{
+OnMaggot:
+ set @mobID, 1002;
+ callfunc "MobPoints";
+ break;
+
+OnScorpion:
+ set @mobID, 1003;
+ callfunc "MobPoints";
+ break;
+
+OnFireGoblin:
+ set @mobID, 1011;
+ callfunc "MobPoints";
+ break;
+
+ end;
+}
diff --git a/npc/new_3-1-tulimshar/passages.txt b/npc/new_3-1-tulimshar/passages.txt
new file mode 100644
index 00000000..2ce31455
--- /dev/null
+++ b/npc/new_3-1-tulimshar/passages.txt
@@ -0,0 +1,5 @@
+//
+
+new_3-1.gat,42,88 warp tofield 5,2,new_1-1.gat,58,17
+new_3-1.gat,32,71 warp toinn 0,0,new_8-1.gat,25,34
+new_3-1.gat,75,41 warp tohouse 0,0,new_8-1.gat,71,72
diff --git a/npc/new_3-1-tulimshar/rewards_master.txt b/npc/new_3-1-tulimshar/rewards_master.txt
new file mode 100644
index 00000000..9c0ddb43
--- /dev/null
+++ b/npc/new_3-1-tulimshar/rewards_master.txt
@@ -0,0 +1,87 @@
+new_3-1.gat,50,53,0 script Ishi 106,{
+ if (MPQUEST == 0) goto L_Register;
+ if (tvis == 0) set tvis, 1;
+ if (Mobpt < tvis) goto L_NotEnough;
+
+ setarray @Items, 502, 502, 503, 504, 505, 506, 507, 508, 509, 510, 586, 512, 513, 514, 515, 516, 517, 518, 519, 520;
+
+ mes "[Ishi the Rewards Master]";
+ mes "\"Welcome! I see you have " + Mobpt + " Monster Points. Would you like to exchange some of those for items?\"";
+ next;
+
+ set @i, 0;
+ setarray @Menu$, "", "", "", "", "", "", "", "", "", "", "";
+ callsub SUB_prep_menu;
+
+ menu
+ @Menu$[0], -,
+ @Menu$[1], -,
+ @Menu$[2], -,
+ @Menu$[3], -,
+ @Menu$[4], -,
+ @Menu$[5], -,
+ @Menu$[6], -,
+ @Menu$[7], -,
+ @Menu$[8], -,
+ @Menu$[9], -,
+ @Menu$[10], -;
+
+ if (@menu > @i) close;
+
+ set @req, @menu;
+ set @rec, 0;
+
+L_Item_Loop:
+ if (@rec == @req || Mobpt < tvis) goto L_Item_Done;
+
+ callsub SUB_give_item;
+ set @rec, @rec + 1;
+ goto L_Item_Loop;
+
+L_Item_Done:
+ if (@rec < @req) mes "It looks like your Monster Points were over estimated.";
+ close;
+
+L_Register:
+ mes "[Ishi the Rewards Master]";
+ mes "\"Hey, it seems like you didn't register as a quest participant yet! You can sign up with Aidan.\"";
+ close;
+
+L_NotEnough:
+ mes "[Ishi the Rewards Master]";
+ mes "\"You don't have enough Monster Points for a reward. You'll need to kill some more monsters first.\"";
+ close;
+
+//////////////////////////////////////////////////
+// Subroutines
+//////////////////////////////////////////////////
+
+SUB_prep_menu:
+ set @pts, Mobpt;
+ set @dif, tvis;
+
+L_Menu_Loop:
+ if (@pts < @dif || @i == 10) goto L_Menu_Done;
+
+ set @Menu$[@i], @i + 1;
+
+ set @i, @i + 1;
+ set @pts, @pts - @dif;
+ set @dif, @dif + 1;
+
+ goto L_Menu_Loop;
+L_Menu_Done:
+ set @Menu$[@i], "No thanks";
+ return;
+
+SUB_give_item:
+ set Mobpt, Mobpt - tvis;
+ set tvis, tvis + 1;
+ set @ID, @Items[rand(getarraysize(@Items))];
+
+ getitem @ID, 1;
+
+ mes "You received one " + getitemname(@ID) + "!";
+
+ return;
+}
diff --git a/npc/new_3-1-tulimshar/rules.txt b/npc/new_3-1-tulimshar/rules.txt
new file mode 100644
index 00000000..70917804
--- /dev/null
+++ b/npc/new_3-1-tulimshar/rules.txt
@@ -0,0 +1,7 @@
+//
+
+new_3-1.gat,29,28,0 script #Rules 127,1,1,{
+ if (TUT_var & 1 == 1) close;
+ callfunc "GameRules";
+ mes "Ian, the trainer, can help you get to know the game.";
+}
diff --git a/npc/new_3-1-tulimshar/sandra.txt b/npc/new_3-1-tulimshar/sandra.txt
new file mode 100644
index 00000000..4922bd60
--- /dev/null
+++ b/npc/new_3-1-tulimshar/sandra.txt
@@ -0,0 +1,81 @@
+new_3-1.gat,110,71,0 script Sandra 114,{
+ if(Scorp == 2) goto done;
+ if(Scorp == 1) goto reas;
+ set @TEMP,rand(3);
+ if(@TEMP == 1) goto L_1;
+ if(@TEMP == 2) goto L_2;
+ if(@TEMP == 3) goto L_3;
+ if(@TEMP == 0) goto L_4;
+L_1:
+ mes "[Sandra]";
+ mes "\"In the outskirts of Tulimshar, there wanders a red scorpion. I need a favor, please help me.\"";
+ next;
+ goto red;
+L_2:
+ mes "[Sandra]";
+ mes "\"When you venture in the outskirts of Tulimshar, you can spot a red scorpion. Will you help me kill one?\"";
+ next;
+ goto red;
+L_3:
+ mes "[Sandra]";
+ mes "\"The red scorpion stinger carries many properties used in potions.\"";
+ next;
+ goto red;
+L_4:
+ mes "[Sandra]";
+ mes "\"You look sturdy enough, will you help me get something?\"";
+ next;
+ goto red;
+red:
+ menu "Yes",L_kl,"No",L_N;
+L_kl:
+ if(@TEMP == 1) goto K_1;
+ if(@TEMP == 2) goto K_2;
+ if(@TEMP == 3) goto K_3;
+ if(@TEMP == 0) goto K_1;
+K_1:
+ mes "[Sandra]";
+ mes "\"I need you to slaughter the red scorpion found outside of Tulimshar and bring me 5 [Red Stingers].\"";
+ next;
+ goto set1;
+K_2:
+ mes "[Sandra]";
+ mes "\"I heard a while ago that the stinger of a red scorpion can be used for medical purposes. I need you to help me get 5 [Red Stingers].\"";
+ next;
+ goto set1;
+K_3:
+ mes "[Sandra]";
+ mes "\"Bring me 5 [Red Stingers] and i will reward you greatly.\"";
+ next;
+ goto set1;
+set1:
+ set Scorp,1;
+ mes "[Sandra]";
+ mes "\"Please bring me them!\"";
+ close;
+reas:
+ if(countitem(517) >= 5) goto have;
+ mes "[Sandra]";
+ mes "\"Please hurry and bring me 5 [Red Stingers].\"";
+ close;
+have:
+ mes "[Sandra]";
+ mes "\"Excellent!";
+ mes "You brought me 5 [Red Stingers]!\"";
+ delitem 517,5;
+ next;
+ mes "[Sandra]";
+ mes "\"Here you go, your reward!\"";
+ mes "+Got Bow";
+ mes "+Got Arrows 100";
+ getitem 1200,1;
+ getitem 1199,100;
+ set Scorp,2;
+ close;
+done:
+ mes "[Sandra]";
+ mes "\"Thank you for all your help!\"";
+ close;
+L_N:
+ close;
+}
diff --git a/npc/new_3-1-tulimshar/soul-menhir.txt b/npc/new_3-1-tulimshar/soul-menhir.txt
new file mode 100644
index 00000000..fab1e9f2
--- /dev/null
+++ b/npc/new_3-1-tulimshar/soul-menhir.txt
@@ -0,0 +1,6 @@
+new_3-1.gat,38,69,0 script Soul Menhir 144, {
+ set @map$, "new_3-1.gat";
+ set @x, 38;
+ set @y, 70;
+ callfunc "SoulMenhir";
+}
diff --git a/npc/new_3-1-tulimshar/vincent.txt b/npc/new_3-1-tulimshar/vincent.txt
new file mode 100644
index 00000000..4e2a0926
--- /dev/null
+++ b/npc/new_3-1-tulimshar/vincent.txt
@@ -0,0 +1,102 @@
+new_3-1.gat,135,42,0 script Vincent 113,{
+ if(Bugleg == 1) goto L_Reas;
+ if(Bugleg == 2) goto L_Done;
+ set @TEMP, rand(4);
+ if(@TEMP == 0) goto L_1;
+ if(@TEMP == 1) goto L_2;
+ if(@TEMP == 2) goto L_3;
+ if(@TEMP == 3) goto L_4;
+
+L_1:
+ mes "[Vincent]";
+ mes "\"I just need 30 more [Bug Legs] to finish my action figure!\"";
+ next;
+ goto L_Ask;
+
+L_2:
+ mes "[Vincent]";
+ mes "\"This maggot action figure is awesome! I just need to attach [30 Part A{Bug Leg}]\"";
+ next;
+ goto L_Ask;
+
+L_3:
+ mes "[Vincent]";
+ mes "\"This is a great action figure! A must have! All I need is a few parts...\"";
+ goto L_Ask;
+
+L_4:
+ mes "[Vincent]";
+ mes "\"Can you get me 30 [Bug Legs]? I need them to replace the action figure parts.\"";
+ next;
+ goto L_Ask;
+
+L_Ask:
+ mes "[Vincent]";
+ mes "\"Will you help me find 30 [Bug Legs]?\"";
+ next;
+ menu
+ "Yes", L_Sure,
+ "No", -;
+ close;
+
+L_Sure:
+ set Bugleg, 1;
+ set @TEMP,rand(4);
+ if(@TEMP == 0) goto J_1;
+ if(@TEMP == 1) goto J_2;
+ if(@TEMP == 2) goto J_3;
+ if(@TEMP == 3) goto J_4;
+
+J_1:
+ mes "[Vincent]";
+ mes "\"Thank you!\"";
+ next;
+ goto L_Wait;
+
+J_2:
+ mes "[Vincent]";
+ mes "\"I don't know how to thank you enough!\"";
+ next;
+ goto L_Wait;
+
+J_3:
+ mes "[Vincent]";
+ mes "\"I will thank you when I get them!\"";
+ next;
+ goto L_Wait;
+
+J_4:
+ mes "[Vincent]";
+ mes "\"I'm sure I will give a small reward. :D\"";
+ next;
+ goto L_Wait;
+
+L_Wait:
+ mes "[Vincent]";
+ mes "\"Now please go get me 30 [Bug Legs]\"";
+ close;
+
+L_Reas:
+ if(countitem(518) >= 30) goto L_Have;
+ mes "[Vincent]";
+ mes "\"Please help me collect 30 [Bug Legs]!\"";
+ close;
+
+L_Have:
+ delitem 518, 30;
+ mes "[Vincent]";
+ mes "\"Excellent! Finally I can complete the model!!\"";
+ next;
+ mes "[Vincent]";
+ mes "\"Here you go, a little of my appreciation!\"";
+ next;
+ set zeny, zeny + 1000;
+ set Bugleg, 2;
+ close;
+
+L_Done:
+ mes "[Vincent]";
+ mes "\"Thanks for your help!\"";
+ close;
+}
+
diff --git a/npc/new_3-1-tulimshar/workers.txt b/npc/new_3-1-tulimshar/workers.txt
new file mode 100644
index 00000000..6aa89103
--- /dev/null
+++ b/npc/new_3-1-tulimshar/workers.txt
@@ -0,0 +1,13 @@
+//
+
+new_3-1.gat,45,21,0 script Construction Worker 155,{
+ mes "[Construction worker]";
+ mes "\"I can't let you beyond this gate. The area is closed for renovation; most of it was destroyed during the earthquake.\"";
+ close;
+}
+
+new_3-1.gat,124,21,0 script Construction Worker 155,{
+ mes "[Construction worker]";
+ mes "\"Move along.\"";
+ close;
+}
diff --git a/npc/new_30-1-west-woodland-cave/monsters.txt b/npc/new_30-1-west-woodland-cave/monsters.txt
new file mode 100644
index 00000000..b0620568
--- /dev/null
+++ b/npc/new_30-1-west-woodland-cave/monsters.txt
@@ -0,0 +1,14 @@
+// Map: new_30-1
+// This is the caves beneath West Woodland.
+//
+
+new_30-1.gat,0,0,0,0 monster Bat 1017,50,0,0,Mob30::OnBat
+
+new_30-1.gat,0,0,0 script Mob30 -1,{
+OnBat:
+ set @mobID, 1017;
+ callfunc "MobPoints";
+ break;
+
+ end;
+}
diff --git a/npc/new_30-1-west-woodland-cave/passages.txt b/npc/new_30-1-west-woodland-cave/passages.txt
new file mode 100644
index 00000000..55e27713
--- /dev/null
+++ b/npc/new_30-1-west-woodland-cave/passages.txt
@@ -0,0 +1,4 @@
+new_30-1.gat,91,108 warp lowtohigh 0,0,new_30-1.gat,103,52
+new_30-1.gat,101,54 warp hightolow 5,0,new_30-1.gat,91,109
+new_30-1.gat,56,174 warp tomap29low 2,0,new_29-1.gat,93,59
+new_30-1.gat,35,32 warp tomap29high 0,0,new_29-1.gat,76,39 \ No newline at end of file
diff --git a/npc/new_31-1-southwest-woodland/alice.txt b/npc/new_31-1-southwest-woodland/alice.txt
new file mode 100644
index 00000000..b17e7c9c
--- /dev/null
+++ b/npc/new_31-1-southwest-woodland/alice.txt
@@ -0,0 +1,46 @@
+//#################################################################################
+//# #
+//# A herb collector giving the players some hints about finding and brewing #
+//# herbs #
+//# #
+//#################################################################################
+
+
+new_31-1.gat,52,53,0 script Alice 106, {
+ mes "[Alice]";
+ mes "\"Greeting, fellow wanderer.";
+ mes "Are you collecting herbs, too?\"";
+ next;
+ menu
+ "Yes, sure.", L_findmany,
+ "Herbs?", L_herbs,
+ "Nope, just enjoying the scenery.", close;
+
+L_findmany:
+ mes "[Alice]";
+ mes "\"And? Did you already find a lot?\"";
+ next;
+ menu
+ "Yes, I already got plenty of them.", L_plenty,
+ "No, I am out of luck.", -;
+ mes "[Alice]";
+ mes "\"Oooh, how sad. Let me give you a little tip:";
+ mes "Herbs are often growing in places where they can't be spotted that easily. Don't forget to look behind the trees, too.\"";
+ close;
+
+L_plenty:
+ mes "[Alice]";
+ mes "\"That's great.";
+ mes "When you are not that good at brewing you should consider letting someone else brew them for you.";
+ mes "Good brewers get much better healing potions from them.";
+ mes "The most important characteristic of a good brewer is intelligence.\"";
+ close;
+
+
+L_herbs:
+ mes "[Alice]";
+ mes "\"Yes, some powerful magic herbs started to grow around here and a mile to the southeast.";
+ mes "Caul in Hurnscald found a way to brew magical healing potions from them, and I have heard a rumor that they may also be good for making colors.";
+ mes "Now everyone is running around in the woods to harvest the herbs.\"";
+ close;
+}
diff --git a/npc/new_31-1-southwest-woodland/monsters.txt b/npc/new_31-1-southwest-woodland/monsters.txt
new file mode 100644
index 00000000..ba9d7c2e
--- /dev/null
+++ b/npc/new_31-1-southwest-woodland/monsters.txt
@@ -0,0 +1,46 @@
+// Map: new_31-1
+// This is South-West Woodland.
+//
+
+new_31-1.gat,0,0,0,0 monster LogHead 1025,40,0,0,Mob31::OnLogHead
+new_31-1.gat,0,0,0,0 monster SpikyMushroom 1019,20,0,0,Mob31::OnSpikyMushroom
+new_31-1.gat,0,0,0,0 monster Flower 1014,20,0,0,Mob31::OnFlower
+
+new_31-1.gat,0,0,0,0 monster Gamboge 1031,3,0,0,Mob31::OnGamboge
+new_31-1.gat,0,0,0,0 monster Alizarin 1032,3,0,0,Mob31::OnAlizarin
+
+new_31-1.gat,0,0,0,0 monster SilkWorm 1035,7,15000,7000,Mob31::onSilkWorm
+
+new_31-1.gat,0,0,0 script Mob31 -1,{
+OnLogHead:
+ set @mobID, 1025;
+ callfunc "MobPoints";
+ break;
+
+OnSpikyMushroom:
+ set @mobID, 1019;
+ callfunc "MobPoints";
+ break;
+
+OnFlower:
+ set @mobID, 1014;
+ callfunc "MobPoints";
+ break;
+
+OnGamboge:
+ set @mobID, 1031;
+ callfunc "MobPoints";
+ break;
+
+OnAlizarin:
+ set @mobID, 1032;
+ callfunc "MobPoints";
+ break;
+
+OnSilkWorm:
+ set @mobID, 1035;
+ callfunc "MobPoints";
+ break;
+
+ end;
+}
diff --git a/npc/new_31-1-southwest-woodland/passages.txt b/npc/new_31-1-southwest-woodland/passages.txt
new file mode 100644
index 00000000..4adfcdcd
--- /dev/null
+++ b/npc/new_31-1-southwest-woodland/passages.txt
@@ -0,0 +1 @@
+new_31-1.gat,93,54 warp map31to14 0,1,new_14-1.gat,15,54 \ No newline at end of file
diff --git a/npc/new_32-1-south-woodland-2/monsters.txt b/npc/new_32-1-south-woodland-2/monsters.txt
new file mode 100644
index 00000000..d59bec06
--- /dev/null
+++ b/npc/new_32-1-south-woodland-2/monsters.txt
@@ -0,0 +1,40 @@
+// Map: new_32-1
+// This is Southernmost Woodlands.
+//
+
+new_32-1.gat,0,0,0,0 monster Mouboo 1028,5,0,0,Mob32::OnMouboo
+new_32-1.gat,0,0,0,0 monster Scorpion 1003,15,0,0,Mob32::OnScorpion
+
+new_32-1.gat,0,0,0,0 monster Mauve 1029,3,0,0,Mob32::OnMauve
+new_32-1.gat,0,0,0,0 monster Cobalt 1030,3,0,0,Mob32::OnCobalt
+
+new_32-1.gat,0,0,0,0 monster SilkWorm 1035,7,15000,7000,Mob32::onSilkWorm
+
+new_32-1.gat,0,0,0 script Mob32 -1,{
+OnMouboo:
+ set @mobID, 1028;
+ callfunc "MobPoints";
+ break;
+
+OnScorpion:
+ set @mobID, 1003;
+ callfunc "MobPoints";
+ break;
+
+OnMauve:
+ set @mobID, 1029;
+ callfunc "MobPoints";
+ break;
+
+OnCobalt:
+ set @mobID, 1030;
+ callfunc "MobPoints";
+ break;
+
+OnSilkWorm:
+ set @mobID, 1035;
+ callfunc "MobPoints";
+ break;
+
+ end;
+}
diff --git a/npc/new_32-1-south-woodland-2/passages.txt b/npc/new_32-1-south-woodland-2/passages.txt
new file mode 100644
index 00000000..dbefcf9c
--- /dev/null
+++ b/npc/new_32-1-south-woodland-2/passages.txt
@@ -0,0 +1 @@
+new_32-1.gat,55,20 warp map32to14 3,0,new_14-1.gat,56,103
diff --git a/npc/new_33-1-hill-northwest/monsters.txt b/npc/new_33-1-hill-northwest/monsters.txt
new file mode 100644
index 00000000..89332f1d
--- /dev/null
+++ b/npc/new_33-1-hill-northwest/monsters.txt
@@ -0,0 +1,76 @@
+// Map: new_33-1
+// This is North Woodlands Mountains.
+//
+
+new_33-1.gat,0,0,0,0 monster Bat 1017,5,0,0,Mob33::OnBat
+new_33-1.gat,0,0,0,0 monster FireGoblin 1011,5,0,0,Mob33::OnFireGoblin
+new_33-1.gat,0,0,0,0 monster Mouboo 1028,5,0,0,Mob33::OnMouboo
+new_33-1.gat,0,0,0,0 monster Flower 1014,5,0,0,Mob33::OnFlower
+new_33-1.gat,0,0,0,0 monster SpikyMushroom 1019,5,0,0,Mob33::OnSpikyMushroom
+new_33-1.gat,0,0,0,0 monster EvilMushshroom 1013,10,0,0,Mob33::OnEvilMushroom
+
+new_33-1.gat,0,0,0,0 monster Alizarin 1032,2,0,0,Mob33::OnAlizarin
+new_33-1.gat,0,0,0,0 monster Gamboge 1031,2,0,0,Mob33::OnGamboge
+new_33-1.gat,0,0,0,0 monster Cobalt 1030,2,0,0,Mob33::OnCobalt
+new_33-1.gat,0,0,0,0 monster Mauve 1029,2,0,0,Mob33::OnMauve
+
+new_33-1.gat,0,0,0,0 monster SilkWorm 1035,10,0,0,Mob33::OnSilkWorm
+
+new_33-1.gat,0,0,0 script Mob33 -1,{
+OnBat:
+ set @mobID, 1017;
+ callfunc "MobPoints";
+ break;
+
+OnFireGoblin:
+ set @mobID, 1011;
+ callfunc "MobPoints";
+ break;
+
+OnMouboo:
+ set @mobID, 1028;
+ callfunc "MobPoints";
+ break;
+
+OnFlower:
+ set @mobID, 1014;
+ callfunc "MobPoints";
+ break;
+
+OnSpikyMushroom:
+ set @mobID, 1019;
+ callfunc "MobPoints";
+ break;
+
+OnEvilMushroom:
+ set @mobID, 1013;
+ callfunc "MobPoints";
+ break;
+
+OnAlizarin:
+ set @mobID, 1032;
+ callfunc "MobPoints";
+ break;
+
+OnGamboge:
+ set @mobID, 1031;
+ callfunc "MobPoints";
+ break;
+
+OnCobalt:
+ set @mobID, 1030;
+ callfunc "MobPoints";
+ break;
+
+OnMauve:
+ set @mobID, 1029;
+ callfunc "MobPoints";
+ break;
+
+OnSilkWorm:
+ set @mobID, 1035;
+ callfunc "MobPoints";
+ break;
+
+ end;
+}
diff --git a/npc/new_33-1-hill-northwest/passages.txt b/npc/new_33-1-hill-northwest/passages.txt
new file mode 100644
index 00000000..69a2cba2
--- /dev/null
+++ b/npc/new_33-1-hill-northwest/passages.txt
@@ -0,0 +1 @@
+new_33-1.gat,46,105 warp map33to28 2,-1,new_28-1.gat,45,22
diff --git a/npc/new_34-1-north-beach/monsters.txt b/npc/new_34-1-north-beach/monsters.txt
new file mode 100644
index 00000000..89fcbda7
--- /dev/null
+++ b/npc/new_34-1-north-beach/monsters.txt
@@ -0,0 +1,26 @@
+// Map: new_34-1
+// This is the Beach west of Tulimshar.
+//
+
+new_34-1.gat,0,0,0,0 monster SeaSlime 1033,30,0,0,Mob34::OnSeaSlime
+new_34-1.gat,0,0,0,0 monster GiantMaggot 1006,10,0,0,Mob34::OnGiantMaggot
+new_34-1.gat,0,0,0,0 monster RedScorpion 1004,12,0,0,Mob34::OnRedScorpion
+
+new_34-1.gat,0,0,0 script Mob34 -1,{
+OnSeaSlime:
+ set @mobID, 1033;
+ callfunc "MobPoints";
+ break;
+
+OnGiantMaggot:
+ set @mobID, 1006;
+ callfunc "MobPoints";
+ break;
+
+OnRedScorpion:
+ set @mobID, 1004;
+ callfunc "MobPoints";
+ break;
+
+ end;
+}
diff --git a/npc/new_34-1-north-beach/passages.txt b/npc/new_34-1-north-beach/passages.txt
new file mode 100644
index 00000000..4da6231d
--- /dev/null
+++ b/npc/new_34-1-north-beach/passages.txt
@@ -0,0 +1,2 @@
+new_34-1.gat,83,113 warp todesert 3,1,new_1-1.gat,29,15
+new_34-1.gat,36,111 warp tobeach 3,1,new_15-1.gat,141,21
diff --git a/npc/new_35-1-woodland-village/monsters.txt b/npc/new_35-1-woodland-village/monsters.txt
new file mode 100644
index 00000000..9b108f5f
--- /dev/null
+++ b/npc/new_35-1-woodland-village/monsters.txt
@@ -0,0 +1,26 @@
+// Map: new_35-1
+// This is the cave beneath Hurnscald.
+//
+
+new_35-1.gat,0,0,0,0 monster YellowSlime 1007,20,0,0,Mob35::OnYellowSlime
+new_35-1.gat,0,0,0,0 monster RedSlime 1008,35,0,0,Mob35::OnRedSlime
+new_35-1.gat,0,0,0,0 monster BlackScorpion 1009,25,0,0,Mob35::OnBlackScorpion
+
+new_35-1.gat,0,0,0 script Mob35 -1,{
+OnYellowSlime:
+ set @mobID, 1007;
+ callfunc "MobPoints";
+ break;
+
+OnRedSlime:
+ set @mobID, 1008;
+ callfunc "MobPoints";
+ break;
+
+OnBlackScorpion:
+ set @mobID, 1009;
+ callfunc "MobPoints";
+ break;
+
+ end;
+}
diff --git a/npc/new_35-1-woodland-village/passages.txt b/npc/new_35-1-woodland-village/passages.txt
new file mode 100644
index 00000000..799f3bb8
--- /dev/null
+++ b/npc/new_35-1-woodland-village/passages.txt
@@ -0,0 +1,5 @@
+// To village
+new_35-1.gat,173,20 warp cv-1b 0,0,new_20-1.gat,147,88
+
+// To cave snake cave
+new_35-1.gat,20,57 warp cave 0,1,new_17-1.gat,129,88
diff --git a/npc/new_36-1-magic-house/apprentice.txt b/npc/new_36-1-magic-house/apprentice.txt
new file mode 100644
index 00000000..b27d271d
--- /dev/null
+++ b/npc/new_36-1-magic-house/apprentice.txt
@@ -0,0 +1,58 @@
+new_36-1.gat,25,37,0 script Fabius 115,{
+ mes "\"Hey! Wanna have a drink or something? High quality, low cost. A poor fella like me needs a bit of extra cash, ye know.\"";
+ next;
+ menu
+ "Yes please!",yes,
+ "No thanks.",no,
+ "No way, I thought it was for free!",not_free;
+yes:
+ mes "\"So what would ya like, then?\"";
+ next;
+ menu
+ "A beer",beer,
+ "A milk",milk;
+no:
+ mes "\"Suit yourself.\"";
+ next;
+ goto at_end;
+not_free:
+ mes "\"Oh, you stupid git! ... But hey, let me tell ya something...\"";
+ next;
+ mes "\"There's notes flying around in the room up there. Did ya try reading some?\"";
+ close;
+beer:
+ mes "\"That'll be 175 GP.\"";
+ next;
+ menu "Here you are",beer_yes,
+ "No thanks",beer_no;
+milk:
+ mes "\"That'll be 300 GP.\"";
+ next;
+ menu "Here you are",milk_yes,
+ "No thanks",milk_no;
+beer_yes:
+ if (zeny < 175) goto low_money;
+ getitem 539, 1;
+ set zeny, zeny - 175;
+ goto at_end;
+beer_no:
+ mes "\"No beer, no civilization!\"";
+ next;
+ goto at_end;
+milk_yes:
+ if (zeny < 300) goto low_money;
+ getitem 527, 1;
+ set zeny, zeny - 300;
+ goto at_end;
+milk_no:
+ mes "\"Oh alright. Milk is a deadly poison anyway...\"";
+ next;
+ goto at_end;
+low_money:
+ mes "\"Aw, you don't have enough gold on you!\"";
+ next;
+at_end:
+ mes "\"By the way, have you seen those flying notes and the mirror in the room next door? They're WAY COOL! Try reading some of the notes!\"";
+ close;
+}
+
diff --git a/npc/new_36-1-magic-house/notes.txt b/npc/new_36-1-magic-house/notes.txt
new file mode 100644
index 00000000..dbcb1209
--- /dev/null
+++ b/npc/new_36-1-magic-house/notes.txt
@@ -0,0 +1,102 @@
+new_36-1.gat,23,32,0 script Motto 127,{
+ mes "Mid pleasures and palaces though we may roam,";
+ mes "Be it ever so humble, there's no place like home.";
+ close;
+}
+
+new_36-1.gat,30,32,0 script Note 127,{
+ mes "Please do not open.";
+ close;
+}
+
+new_36-1.gat,38,20,0 script Saying 127,{
+ mes "The early bird catcheth the worm.";
+ close;
+}
+
+new_36-1.gat,27,21,0 script Mirror 127,{
+ mes "You say: \"Mirror mirror on the wall, who has the nicest haircut of them all?\"";
+ next;
+ mes "\"Oh fair adventurer, your hair indeed looks nice. But wouldn't it look much better, after I have rolled my dice?\"";
+ next;
+ mes "Your looks suddenly change...";
+ next;
+ set @style,rand(6);
+ set @color,rand(9);
+ setlook 1,@style+1;
+ setlook 6,@color;
+ close;
+}
+
+// Warp to north-eastern woods
+new_36-1.gat,25,23,0 script Spell 127,{
+ mes "You read: \"I see trees of green, red roses too. I see them bloom for me and you. And I think to myself: \'What a wonderful world\'\"";
+ next;
+ mes "You think: \"Huh?\"";
+ next;
+ mes "The spell fulfills its inevitable purpose...";
+ next;
+ warp "new_28-1.gat",128,28;
+ close;
+}
+
+// Warp to Indian in south-eastern desert
+new_36-1.gat,27,24,0 script Spell 127,{
+ mes "You read: \"A red-coloured fellow smoking his pipe - down in the desert - that's what I like!\"";
+ next;
+ mes "You feel the floor disappear below your feet...";
+ next;
+ warp "new_24-1.gat",33,93;
+ close;
+}
+
+// Warp to snow land
+new_36-1.gat,25,27,0 script Spell 127,{
+ mes "You read: \"Snow-white flakes and eminent frost - I'll go there, whatever the cost!\"";
+ next;
+ mes "You feel yourself getting lighter...";
+ next;
+ warp "new_11-1.gat",84,68;
+ close;
+}
+
+// Warp to Dimond
+new_36-1.gat,27,27,0 script Spell 127,{
+ mes "You read: \"People and cosiness, lively and fun - that's where I've gone!\"";
+ next;
+ mes "The world around you slowly dissolves...";
+ next;
+ warp "new_23-1.gat",34,42;
+ close;
+}
+
+// Warp to mines level 2
+new_36-1.gat,26,28,0 script Spell 127,{
+ mes "You read: \"Darkness and legs, eight of them each - I'd rather not go there, but now it's too late...\"";
+ next;
+ mes "For a moment everything turns black...";
+ next;
+ warp "new_5-1.gat",91,41;
+ close;
+}
+
+// Death
+new_36-1.gat,21,29,0 script Spell 127,{
+ mes "You read: \"Heart stops pumping, breath begone - life is stopping, death has come!\"";
+ next;
+ mes "You're losing control of your body... everything turns black... while slipping to the floor, you hear a faraway scream... suddenly, you see THE LIGHT!";
+ next;
+ gmcommand strcharinfo(0)+":@die ";
+ close;
+}
+
+// Naked
+new_36-1.gat,28,29,0 script Spell 127,{
+ mes "You read: \"Cotton, steel, leather and wool - have I ever seen a greater fool?\"";
+ next;
+ mes "You suddenly feel naked; you ARE naked!";
+ next;
+ nude;
+ close;
+}
+
diff --git a/npc/new_36-1-magic-house/passages.txt b/npc/new_36-1-magic-house/passages.txt
new file mode 100644
index 00000000..44d66724
--- /dev/null
+++ b/npc/new_36-1-magic-house/passages.txt
@@ -0,0 +1,3 @@
+new_36-1.gat,63,43 warp map36to28 0,1,new_28-1.gat,42,91
+new_36-1.gat,67,35 warp tobigroom 0,0,new_36-1.gat,21,40
+new_36-1.gat,21,42 warp tosmallroom 0,1,new_36-1.gat,67,37
diff --git a/npc/new_36-1-magic-house/wizard.txt b/npc/new_36-1-magic-house/wizard.txt
new file mode 100644
index 00000000..ec7deb36
--- /dev/null
+++ b/npc/new_36-1-magic-house/wizard.txt
@@ -0,0 +1,25 @@
+new_36-1.gat,66,39,0 script Old Wizard 116,{
+ mes "\"Welcome, dear wanderer! Come into my humble home. Take a rest, eat and drink.\"";
+ next;
+ menu
+ "Thanks, that's very kind of you!",thanks,
+ "Oh, shut up!",shutup;
+shutup:
+ mes "\"That attitude isn't going to get you very far, my dear.\"";
+ close;
+thanks:
+ mes "\"Behind this door, my apprentice will serve you.\"";
+ next;
+ menu
+ "Alright.",ok,
+ "Your apprentice? ... No thanks.",nothx;
+nothx:
+ mes "\"Goodbye, then!\"";
+ close;
+ok:
+ mes "\"Beware the flying notes though, some of them are really dangerous. I haven't been able to persuade them to get back into their book. And avoid the mirror, it's been acting strange lately.\"";
+ next;
+ mes "\"Oh, and please don't take my apprentice too seriously. He still has a lot to learn.\"";
+ close;
+}
+
diff --git a/npc/new_37-1-woodland-mine/miners.txt b/npc/new_37-1-woodland-mine/miners.txt
new file mode 100644
index 00000000..99bba7fb
--- /dev/null
+++ b/npc/new_37-1-woodland-mine/miners.txt
@@ -0,0 +1,6 @@
+//
+
+new_37-1.gat,78,59,0 script Miner 109,1,1,{
+ mes "[Miner]";
+ mes "\"I'm sorry, but this area is closed off.\"";
+}
diff --git a/npc/new_37-1-woodland-mine/monsters.txt b/npc/new_37-1-woodland-mine/monsters.txt
new file mode 100644
index 00000000..d38d2695
--- /dev/null
+++ b/npc/new_37-1-woodland-mine/monsters.txt
@@ -0,0 +1,39 @@
+// Map: new_37-1
+// This is the Woodland Mines.
+//
+
+new_37-1.gat,0,0,0,0 monster LogHead 1025,5,500,600,Mob37::OnLogHead
+new_37-1.gat,136,77,20,35 monster SeaSlime 1033,5,1000,500,Mob37::OnSeaSlime
+new_37-1.gat,0,0,0,0 monster Bat 1017,2,4000,3000,Mob37::OnBat
+new_37-1.gat,79,59,0,0 monster YellowSlime 1007,1,120000,60000,Mob37::OnYellowSlime
+
+new_37-1.gat,57,63,4,4 monster SilkWorm 1035,2,60000,30000,Mob37::OnSilkWorm
+
+new_37-1.gat,0,0,0 script Mob37 -1,{
+OnLogHead:
+ set @mobID, 1025;
+ callfunc "MobPoints";
+ break;
+
+OnSeaSlime:
+ set @mobID, 1033;
+ callfunc "MobPoints";
+ break;
+
+OnBat:
+ set @mobID, 1017;
+ callfunc "MobPoints";
+ break;
+
+OnYellowSlime:
+ set @mobID, 1007;
+ callfunc "MobPoints";
+ break;
+
+OnSilkWorm:
+ set @mobID, 1035;
+ callfunc "MobPoints";
+ break;
+
+ end;
+}
diff --git a/npc/new_37-1-woodland-mine/passages.txt b/npc/new_37-1-woodland-mine/passages.txt
new file mode 100644
index 00000000..937406ee
--- /dev/null
+++ b/npc/new_37-1-woodland-mine/passages.txt
@@ -0,0 +1,5 @@
+// To village
+new_37-1.gat,79,97 warp woodland 2,-1,new_18-1.gat,78,18
+
+// To camp building
+new_37-1.gat,65,73 warp inside -1,-1,new_38-1.gat,50,27
diff --git a/npc/new_38-1-woodland-mine/angus.txt b/npc/new_38-1-woodland-mine/angus.txt
new file mode 100644
index 00000000..7be183f4
--- /dev/null
+++ b/npc/new_38-1-woodland-mine/angus.txt
@@ -0,0 +1,19 @@
+// Angus the craftsman
+
+new_38-1.gat,31,39,0 script Angus 147,{
+ set @honorific$, "lad";
+ if (Sex == 0) set @honorific$, "lass";
+
+ if (Inspector == 10) goto L_NohMask;
+
+ mes "[Angus]";
+ mes "Angus is tinkering with some mechanical concoction.";
+ mes "\"It keeps breakin' left an' right... fortunat'ly I put in redundancies everywhere, but I haf' to keep repairin'.\"";
+ next;
+ close;
+
+L_NohMask:
+ mes "[Angus]";
+ mes "\"I'm sorry, " + @honorific$ + ", I truely am, but I stay in the town. One o' the miners might have heard something.\"";
+ close;
+}
diff --git a/npc/new_38-1-woodland-mine/books.txt b/npc/new_38-1-woodland-mine/books.txt
new file mode 100644
index 00000000..dfd4ecda
--- /dev/null
+++ b/npc/new_38-1-woodland-mine/books.txt
@@ -0,0 +1,18 @@
+//
+
+new_38-1.gat,112,19,0 script #Bookcase38 127,0,1{
+ if (Inspector == 11) goto L_NohMask;
+
+ mes "Looking over the bookcase, you find nothing strange or out of order.";
+ close;
+
+L_NohMask:
+ mes "Looking over the bookcase closely, you find a book is upside down.";
+ next;
+
+ mes "The book has been hollowed out. Inside is a theater mask and a note that you cannot even begin to read.";
+ next;
+
+ set Inspector, 12;
+ close;
+}
diff --git a/npc/new_38-1-woodland-mine/caul.txt b/npc/new_38-1-woodland-mine/caul.txt
new file mode 100644
index 00000000..99e316a1
--- /dev/null
+++ b/npc/new_38-1-woodland-mine/caul.txt
@@ -0,0 +1,479 @@
+//#################################################################################
+//#
+//# this script file contains the script for the NPC which allows the
+//# PCs to create potions from herbs.
+//#
+//# Participates in the monster oil subquest (cf. Nicholas' Setzer quest)
+//#
+//#################################################################################
+
+new_38-1.gat,37,22,0 script Caul 107,{
+ set @SETZER_INITIAL, 0;
+ set @SETZER_KNOWS_OIL, 1;
+ set @SETZER_KNOWS_STINGER, 2;
+ set @SETZER_FLAG_MADE_OIL, 4;
+
+ set @PEARL, 700;
+ set @SNAKE_SKIN, 641;
+ set @BLACK_STINGER, 709;
+ set @ASH_PILE, 701;
+ set @GOLDEN_STINGER, 706;
+ set @MONSTER_OIL, 707;
+ set @MONSTER_OIL_XP, 100000;
+
+ set @Q_MASK, NIBBLE_3_MASK;
+ set @Q_SHIFT, NIBBLE_3_SHIFT;
+
+ set @MAUVE, 680;
+ set @COBALT, 681;
+ set @GAMBOGE, 682;
+ set @ALIZARIN, 683;
+
+ set @Q_status, (QUEST_Forestbow_state & @Q_MASK) >> @Q_SHIFT;
+
+ mes "[Caul]";
+ mes "\"I can help you to brew healing potions out of mauve, cobalt, gamboge and alizarin herbs.";
+ mes "How many potions do you want to brew?\"";
+ next;
+
+
+ if (@Q_status && Inspector == 10)
+ menu
+ "One", L_1,
+ "Five", L_5,
+ "Ten", L_10,
+ "Fifty", L_50,
+ "I would like to brew monster oil.", L_monster_oil_start,
+ "Actually...", L_NohMask,
+ "Never mind", L_close;
+ if (@Q_status && Inspector != 10)
+ menu
+ "One", L_1,
+ "Five", L_5,
+ "Ten", L_10,
+ "Fifty", L_50,
+ "I would like to brew monster oil.", L_monster_oil_start,
+ "Never mind", L_close;
+ if (!@Q_status && Inspector == 10)
+ menu
+ "One", L_1,
+ "Five", L_5,
+ "Ten", L_10,
+ "Fifty", L_50,
+ "Actually...", L_NohMask,
+ "Never mind", L_close;
+ if (!@Q_status && Inspector != 10)
+ menu
+ "One", L_1,
+ "Five", L_5,
+ "Ten", L_10,
+ "Fifty", L_50,
+ "Never mind", L_close;
+
+L_1:
+ set @num, 1;
+ goto L_brew;
+
+L_5:
+ set @num, 5;
+ goto L_brew;
+
+L_10:
+ set @num, 10;
+ goto L_brew;
+
+L_50:
+ set @num, 50;
+ goto L_brew;
+
+
+L_brew:
+ mes "[Caul]";
+ mes "\"Now put " + @num + " herbs of each kind into the cauldron, stir, and concentrate all your mental energy on it.\"";
+ next;
+
+ if (countitem(@MAUVE) < @num) goto L_NotEnough;
+ if (countitem(@COBALT) < @num) goto L_NotEnough;
+ if (countitem(@GAMBOGE) < @num) goto L_NotEnough;
+ if (countitem(@ALIZARIN) < @num) goto L_NotEnough;
+
+ set @a, @num;
+ set @result1, 0;
+ set @result2, 0;
+ set @result3, 0;
+ set @result4, 0;
+
+L_CraftLoop:
+ set @throw, rand(readparam(bInt));
+ set @result, 1;
+ if (@throw >= 5) set @result, 2;
+ if (@throw >= 15) set @result, 3;
+ if (@throw >= 35) set @result, 4;
+
+ if (@result == 1) set @result1, @result1 + 1;
+ if (@result == 2) set @result2, @result2 + 1;
+ if (@result == 3) set @result3, @result3 + 1;
+ if (@result == 4) set @result4, @result4 + 1;
+
+ set @a, @a - 1;
+ if (@a > 0) goto L_CraftLoop;
+
+ delitem @MAUVE, @num;
+ delitem @COBALT, @num;
+ delitem @GAMBOGE, @num;
+ delitem @ALIZARIN, @num;
+
+ getitem 684, @result1;
+ getitem 685, @result2;
+ getitem 686, @result3;
+ getitem 687, @result4;
+
+ mes "[Caul]";
+ mes "\"Well done! You made:";
+ if (@result1 > 0) mes @result1 + " tiny potions";
+ if (@result2 > 0) mes @result2 + " small potions";
+ if (@result3 > 0) mes @result3 + " medium potions";
+ if (@result4 > 0) mes @result4 + " large potions";
+ mes "Come again.\"";
+ close;
+
+L_NotEnough:
+ mes "[Caul]";
+ mes "\"Oh, it seems like you don't have enough herbs. You can find herbs in deep forests.\"";
+ close;
+
+L_monster_oil_start:
+ mes "[Caul]";
+ mes "\"Monster oil? Hmm, I have heard of it, but I don't remember the precise recipe to make it...\"";
+ next;
+ if (@Q_status == @SETZER_KNOWS_OIL)
+ menu "OK, I'll ask around, perhaps someone else knows.", L_close;
+ if (@Q_status > @SETZER_KNOWS_OIL)
+ menu "Rauk told me the recipe.", L_monster_oil_knows_recipe;
+ close;
+
+L_monster_oil_knows_recipe:
+ mes "[Caul]";
+ mes "\"Ah, but of course! Yes, we should be able to brew that here. Except that... hmm. Pearl and three black scorpion stingers? This sounds very dangerous;";
+ mes "I fear that I will have to ask you to do this yourself.\"";
+ next;
+
+L_monster_oil_main_menu:
+ set @main_menu, 1;
+ menu
+ "What do you mean by 'dangerous'?", L_monster_oil_why_dangerous,
+ "What do I need, again?", L_monster_oil_ingredients,
+ "How does this work?", L_monster_oil_explain,
+ "Let's start!", L_monster_oil_start_brew,
+ "Where can I get a golden scorpion stinger?", L_monster_oil_where_gold,
+ "I've changed my mind.", L_close;
+ close;
+
+L_monster_oil_why_dangerous:
+ mes "[Caul]";
+ mes "\"Well, with those two reagents in there at that ratio, you risk an explosion-- quite possibly a fatal one. So be prepared to duck if the brew gets too bubbly-- it's better to lose the ingredients than your head!\"";
+ next;
+ goto L_monster_oil_main_menu;
+
+L_monster_oil_ingredients:
+ mes "[Caul]";
+ mes "\"You will need one pearl, two snake skins, three black scorpion stingers, two piles of ash, and a golden scorpion stinger. The golden stinger goes in last, after the dangerous part, so you won't lose if if your brew blows up.\"";
+ next;
+ mes "[Caul]";
+ mes "\"You should also bring gamboge, mauve, alizarin and cobalt leaves. You will have to stabilize the brew, and they will help with that.\"";
+ next;
+ goto L_monster_oil_main_menu;
+
+L_monster_oil_explain:
+ mes "[Caul]";
+ mes "\"After you have put in the monster parts-- except for the golden stinger-- the brew will take on some random color; this can be a light, dark, or medium color. You have to stabilize this color by adding leaves to it.\"";
+ next;
+ mes "[Caul]";
+ mes "\"Of course, with such a violent brew the mixture will change color by itself, too, probably faster than your leaves can affect it. It will randomly add or remove colors, and might even get lighter.\"";
+ next;
+ mes "[Caul]";
+ mes "\"From what I have seen, it seems to go through phases-- for each alternate leaf it adds a colour, then removes a color, then adds again and so on. Of course, if the color is there already it can't add any more.\"";
+ next;
+ mes "[Caul]";
+ mes "\"I haven't figured out yet precisely when it gets lighter, though.\"";
+ next;
+ mes "[Caul]";
+ mes "\"By adding Mauve, you can make it darker. Alizarin adds red, Gamboge yellow, Cobalt blue. To make it a proper black, you have to get it to be dark gray, then add one Mauve leaf.\"";
+ next;
+ mes "[Caul]";
+ mes "\"Unfortunately the brew changes randomly before your leaves dissolve, so sometimes you can't help but add the wrong color...\"";
+ next;
+ mes "[Caul]";
+ mes "\"Since the brew changes its color first, you might want to add the Mauve when your color is a dark purple or dark green or dark orange and hope for the best.\"";
+ next;
+ mes "[Caul]";
+ mes "\"But don't add too much! If you add a color that is already there, or try to make it darker at the wrong spot, it may backfire.\"";
+ next;
+ if (@main_menu)
+ goto L_monster_oil_main_menu;
+ goto L_monster_oil_loop;
+
+L_monster_oil_where_gold:
+ mes "[Caul]";
+ mes "\"Good question. There aren't any golden scorpions nearby. Perhaps you can find a trader or an adventurer who have travelled further south and ask them to help?\"";
+ next;
+ goto L_monster_oil_main_menu;
+
+L_monster_oil_start_brew:
+ set @main_menu, 0;
+ if (countitem (@PEARL) < 1) goto L_monster_oil_missing;
+ if (countitem (@SNAKE_SKIN) < 2) goto L_monster_oil_missing;
+ if (countitem (@BLACK_STINGER) < 3) goto L_monster_oil_missing;
+ if (countitem (@ASH_PILE) < 2) goto L_monster_oil_missing;
+ if (countitem (@GOLDEN_STINGER) < 1) goto L_monster_oil_missing_gold;
+
+ delitem @PEARL, 1;
+ delitem @SNAKE_SKIN, 2;
+ delitem @BLACK_STINGER, 3;
+ delitem @ASH_PILE, 2;
+
+ set @bubble_mode, 0;
+ setarray @bubble_modes$,
+ "The brew is calm.",
+ "The brew is bubbling.",
+ "The brew is bubbling violently.";
+
+ set @color, 1 << (rand(3));
+ setarray @colors$,
+ "white",
+ "red",
+ "yellow",
+ "orange",
+ "blue",
+ "purple",
+ "green",
+ "gray";
+
+ set @intensity, 1;
+ setarray @intensities$,
+ "light",
+ "medium",
+ "dark";
+
+ set @auto_mode, 0; // Start by adding a colour or going lighter
+
+ goto L_monster_oil_loop;
+
+L_monster_oil_missing:
+ mes "[Caul]";
+ mes "\"You don't seem to have all of the ingredients. You need one pearl, two snake skins, three black stingers, two piles of ash, and one golden stinger.\"";
+ next;
+ close;
+
+L_monster_oil_missing_gold:
+ mes "[Caul]";
+ mes "\"You seem to have everything except for the golden stinger. I understand that this one is hard to get, but I'm sure that you can find one somewhere.\"";
+ next;
+ close;
+
+L_monster_oil_loop:
+ mes "[Brewing monster oil]";
+ mes @bubble_modes$[@bubble_mode];
+ mes "It is currently a " + @intensities$[@intensity] + " " + @colors$[@color] + ".";
+ next;
+
+ menu
+ "Add alizarin leaf", L_monster_oil_alizarin,
+ "Add gamboge leaf", L_monster_oil_gamboge,
+ "Add cobalt leaf", L_monster_oil_cobalt,
+ "Add mauve leaf", L_monster_oil_mauve,
+ "Ask Caul for advice", L_monster_oil_explain,
+ "Duck!", -;
+
+ mes "[Brewing monster oil]";
+ mes "You throw yourself onto the ground. Seconds later, the cauldron shakes, and your entire mixture explodes upwards.";
+ mes "Caul crawls out from underneath a char.";
+ next;
+ mes "[Caul]";
+ mes "\"I'm glad to see that you chose to brew another day... perhaps it might be best if you give up on this dangerous concoction, though!\"";
+ next;
+ close;
+
+L_monster_oil_out_of_leaves:
+ mes "[Brewing monster oil]";
+ mes "You don't have any of these leaves left!";
+ next;
+ goto L_monster_oil_loop;
+
+L_monster_oil_alizarin:
+ set @use_leaf, @ALIZARIN;
+ set @use_color, 1;
+ goto L_monster_oil_leaf_color;
+
+L_monster_oil_gamboge:
+ set @use_leaf, @GAMBOGE;
+ set @use_color, 2;
+ goto L_monster_oil_leaf_color;
+
+L_monster_oil_cobalt:
+ set @use_leaf, @COBALT;
+ set @use_color, 4;
+ goto L_monster_oil_leaf_color;
+
+L_monster_oil_leaf_color:
+ if (countitem (@use_leaf) < 1) goto L_monster_oil_out_of_leaves;
+
+ callsub S_monster_oil_random_move;
+ if (@color & @use_color) goto L_monster_oil_pc_bad;
+ set @color, @color | @use_color;
+ delitem @use_leaf, 1;
+
+ mes "The brew changes its hue as your leaf dissolves.";
+ next;
+ goto L_monster_oil_loop;
+
+L_monster_oil_mauve:
+ if (countitem(@MAUVE) < 1) goto L_monster_oil_out_of_leaves;
+ delitem @MAUVE, 1;
+
+ callsub S_monster_oil_random_move;
+ if (@intensity == 2 && @color == 7) goto L_monster_oil_done;
+ if (@intensity == 2) goto L_monster_oil_pc_bad;
+
+ set @intensity, @intensity + 1;
+ mes "The brew darkens as your mauve leaf dissolves.";
+ next;
+ goto L_monster_oil_loop;
+
+S_monster_oil_random_move:
+ mes "[Brewing monster oil]";
+ mes "You throw in a leaf and stir.";
+
+ if (@auto_mode == 1)
+ goto L_monster_oil_random_1;
+
+L_monster_oil_random_0: // mode 0: add colour or lighten up
+ set @auto_mode, 1;
+ if (rand(3) == 0)
+ goto L_monster_oil_random_0_lighten;
+
+ set @choice, 1 << (rand(3));
+ if (@color & @choice)
+ goto L_monster_oil_auto_bad;
+ set @color, @color | @choice;
+
+ mes "Before your leaf has a chance to dissolve, the brew changes to a " + @colors$[@color] + " hue.";
+ return;
+
+L_monster_oil_random_0_lighten:
+ if (@intensity == 0)
+ goto L_monster_oil_auto_bad;
+ set @intensity, @intensity - 1;
+ mes "Before your leaf has a chance to dissolve, the brew takes on a lighter shade of " + @colors$[@color] + ".";
+ return;
+
+L_monster_oil_random_1: // mode 1: remove colour
+ set @auto_mode, 0;
+ set @choice, 1 << (rand(3));
+ if (!(@color & @choice))
+ goto L_monster_oil_auto_bad;
+ set @color, @color & (~@choice);
+ mes "Before your leaf has a chance to dissolve, the brew changes to a " + @colors$[@color] + " hue.";
+ return;
+
+L_monster_oil_pc_bad:
+ if (rand(readparam(bInt) + 100) > 60) goto L_monster_oil_pc_bad_ok;
+ if (@bubble_mode)
+ mes "As your leaf dissolves, the intensity of the bubbling increases.";
+ if (!@bubble_mode)
+ mes "As your leaf dissolves, the brew begins to bubble.";
+ next;
+ set @bubble_mode, @bubble_mode + 1;
+ if (@bubble_mode > 2)
+ goto L_monster_oil_explode;
+ goto L_monster_oil_loop;
+
+L_monster_oil_pc_bad_ok:
+ mes "Your leaf dissolves but seems to have no effect.";
+ next;
+ goto L_monster_oil_loop;
+
+L_monster_oil_auto_bad:
+ if (rand(3) == 0)
+ return;
+ if (rand(readparam(bInt) + 100) > 70)
+ return;
+ mes "The brew begins to bubble more violently.";
+ set @bubble_mode, @bubble_mode + 1;
+ if (@bubble_mode > 2)
+ next;
+ if (@bubble_mode > 2)
+ goto L_monster_oil_explode;
+ return;
+
+L_monster_oil_explode:
+ mes "[Exploding monster oil]";
+ mes "Your brew explodes!";
+ if (rand(readparam(bAgi)) > 40)
+ goto L_monster_oil_explode_dodge;
+ mes "The burst of boiling monster brew hits you.";
+ next;
+ itemheal (15 * rand(readparam(bVit))) - 1500, 0;
+ close;
+
+L_monster_oil_explode_dodge:
+ mes "You throw yourself to the ground at the very last moment, barely avoiding the burst of boiling monster brew.";
+ next;
+ mes "[Caul]";
+ mes "Caul nods at you from underneath a chair.";
+ mes "\"I told you, it's dangerous!!\"";
+ next;
+ close;
+
+L_monster_oil_done:
+ mes "As you throw in another mauve leaf, the brew takes on a deep black color and calms down.";
+ next;
+
+ mes "[Brewing monster oil]";
+ mes "As instructed, you toss in your golden scorpion stinger.";
+
+ if (countitem (@GOLDEN_STINGER) < 1) goto L_monster_oil_no_gold_end;
+
+ mes "The brew bubbles once more, then calms completely.";
+
+ delitem @GOLDEN_STINGER, 1;
+ getitem @MONSTER_OIL, 1;
+
+ if (!(@Q_status & @SETZER_FLAG_MADE_OIL))
+ getexp @MONSTER_OIL_XP, 0;
+ if (!(@Q_status & @SETZER_FLAG_MADE_OIL))
+ mes "[" + @MONSTER_OIL_XP + " experience points]";
+
+ set @Q_status, @Q_status | @SETZER_FLAG_MADE_OIL;
+ callsub S_Update_Var;
+ next;
+
+ mes "[Caul]";
+ mes "Caul gets up from underneath the cover he was taking and looks at your brew. He is visibly impressed.";
+ mes "\"Well done! This should be just enough for one potion of monster oil. Let me get you a bottle.\"";
+ mes "He hands you the monster oil.";
+ next;
+ close;
+
+L_monster_oil_no_gold_end:
+ mes "But where is your golden stinger? Didn't you have one earlier?";
+ mes "Frustrated, you give up.";
+ next;
+ close;
+
+L_close:
+ close;
+
+S_Update_Var:
+ set QUEST_Forestbow_state,
+ (QUEST_Forestbow_state & ~(@Q_MASK)
+ | (@Q_status << @Q_SHIFT));
+ return;
+
+L_NohMask:
+ mes "[Caul]";
+ mes "\"I'm sorry, but I didn't. I'm staying in town. Try asking one of the miners.\"";
+ close;
+}
+
+
diff --git a/npc/new_38-1-woodland-mine/miners.txt b/npc/new_38-1-woodland-mine/miners.txt
new file mode 100644
index 00000000..92261cb5
--- /dev/null
+++ b/npc/new_38-1-woodland-mine/miners.txt
@@ -0,0 +1,15 @@
+//
+
+new_38-1.gat,85,23,0 script Miner 109,{
+ if (Inspector == 10) goto L_NohMask;
+
+ mes "[Miner]";
+ mes "\"Hello.\"";
+ close;
+
+L_NohMask:
+ set Inspector, 11;
+ mes "[Miner]";
+ mes "\"Yeah, we did hear a commotion. We thought we heard someone go down to the basement, but we checked the whole place over and didn't see anything out of the ordinary.\"";
+ close;
+}
diff --git a/npc/new_38-1-woodland-mine/monsters.txt b/npc/new_38-1-woodland-mine/monsters.txt
new file mode 100644
index 00000000..7eb44908
--- /dev/null
+++ b/npc/new_38-1-woodland-mine/monsters.txt
@@ -0,0 +1,14 @@
+// Map: new_38-1
+// This is the Woodland Mines -- level 1.
+//
+
+new_38-1.gat,114,21,4,3 monster YellowSlime 1007,1,120000,60000,Mob38::OnYellowSlime
+
+new_38-1.gat,0,0,0 script Mob38 -1,{
+OnYellowSlime:
+ set @mobID, 1007;
+ callfunc "MobPoints";
+ break;
+
+ end;
+}
diff --git a/npc/new_38-1-woodland-mine/passages.txt b/npc/new_38-1-woodland-mine/passages.txt
new file mode 100644
index 00000000..f406f47c
--- /dev/null
+++ b/npc/new_38-1-woodland-mine/passages.txt
@@ -0,0 +1,12 @@
+// Outside
+new_38-1.gat,50,28 warp outside -1,-1,new_37-1.gat,65,74
+new_38-1.gat,41,21 warp outside -1,-1,new_37-1.gat,64,69
+
+// Basement
+new_38-1.gat,20,24 warp 1b -1,-1,new_38-1.gat,112,27
+new_38-1.gat,112,26 warp 1f -1,-1,new_38-1.gat,20,23
+
+// Second floor
+new_38-1.gat,21,28 warp 2f 0,-1,new_38-1.gat,79,25
+new_38-1.gat,79,26 warp 1f 0,-1,new_38-1.gat,21,29
+ \ No newline at end of file
diff --git a/npc/new_38-1-woodland-mine/receptionist.txt b/npc/new_38-1-woodland-mine/receptionist.txt
new file mode 100644
index 00000000..822d09a3
--- /dev/null
+++ b/npc/new_38-1-woodland-mine/receptionist.txt
@@ -0,0 +1,65 @@
+//
+
+new_38-1.gat,50,24,0 script Receptionist 108,{
+ mes "[Receptionist]";
+ mes "\"Welcome to the mining camp!";
+ mes "Do you need anything?\"";
+ next;
+
+L_Menu:
+ if (Inspector == 10)
+ menu
+ "Why was a mine setup here?", L_Mine,
+ "Can I go into the mine?", L_Enter,
+ "Did the company build this building?", L_Building,
+ "Did you hear a commotion here the other night?", L_NohMask,
+ "Thank you, no.", -;
+ if (Inspector != 10)
+ menu
+ "Why was a mine setup here?", L_Mine,
+ "Can I go into the mine?", L_Enter,
+ "Did the company build this building?", L_Building,
+ "Thank you, no.", -;
+ close;
+
+L_Mine:
+ mes "[Receptionist]";
+ mes "\"Minerals have been easy to find in this area historically. The mine entrance we're using collapsed from the mountain side when the volcano errupted. Plenty of minerals were exposed then.\"";
+ next;
+ goto L_Question_End;
+
+L_Enter:
+ mes "[Receptionist]";
+ mes "\"I'm sorry, but the mine is very active. Entrance is restricted to miners only.\"";
+ next;
+ goto L_Question_End;
+
+L_Building:
+ mes "[Receptionist]";
+ mes "\"No, the company bought this building. It's been abandoned for a while. The villagers think it's haunted, but we haven't seen anything, except for the basement. None of us have been able to stay there for very long.\"";
+ next;
+
+ menu
+ "Why not?", -,
+ "Not my problem", L_Question_End;
+
+ mes "[Receptionist]";
+ mes "\"I haven't been down there myself, and the ones who have haven't been able to describe why at all.\"";
+ next;
+
+ goto L_Question_End;
+
+L_NohMask:
+ mes "[Receptionist]";
+ mes "\"I stay in town, and so couldn't have heard anything over here. One of the miners might be able to help you.\"";
+ next;
+
+ goto L_Question_End;
+
+L_Question_End:
+ mes "[Receptionist]";
+ mes "\"Do you need anything else?\"";
+ next;
+
+ goto L_Menu;
+}
diff --git a/npc/new_4-1-cave-small/hermit.txt b/npc/new_4-1-cave-small/hermit.txt
new file mode 100644
index 00000000..2ef32941
--- /dev/null
+++ b/npc/new_4-1-cave-small/hermit.txt
@@ -0,0 +1,16 @@
+//
+
+new_4-1.gat,30,30,0 script Arkim 116,{
+ mes "[Arkim the Hermit]";
+ mes "\"Do you want to go back outside?\"";
+ next;
+ menu
+ "Yes please", L_Sure,
+ "Not yet", -;
+ close;
+
+L_Sure:
+ warp "new_9-1.gat", 60, 95;
+ close;
+
+}
diff --git a/npc/new_4-1-cave-small/monsters.txt b/npc/new_4-1-cave-small/monsters.txt
new file mode 100644
index 00000000..f51d010d
--- /dev/null
+++ b/npc/new_4-1-cave-small/monsters.txt
@@ -0,0 +1,21 @@
+// Map: new_4-1
+// This is the Hermit's Cave -- level 1.
+//
+
+new_4-1.gat,0,0,0,0 monster Bat 1017,10,0,0,Mob4::OnBat
+
+new_4-1.gat,0,0,0,0 monster SilkWorm 1035,3,60000,30000,Mob4::OnSilkWorm
+
+new_4-1.gat,0,0,0 script Mob4 -1,{
+OnBat:
+ set @mobID, 1017;
+ callfunc "MobPoints";
+ break;
+
+OnSilkWorm:
+ set @mobID, 1035;
+ callfunc "MobPoints";
+ break;
+
+ end;
+}
diff --git a/npc/cave-small/passages.txt b/npc/new_4-1-cave-small/passages.txt
index 200ab60f..200ab60f 100644
--- a/npc/cave-small/passages.txt
+++ b/npc/new_4-1-cave-small/passages.txt
diff --git a/npc/cave2/chest.txt b/npc/new_5-1-cave2/chest.txt
index 4da805f2..865c0f7e 100644
--- a/npc/cave2/chest.txt
+++ b/npc/new_5-1-cave2/chest.txt
@@ -1,28 +1,31 @@
+//
+
new_5-1.gat,93,37,0 script Treasure 111,{
- if( ChestQuest == 1) goto done;
- mes "[Chest]";
+ if( ChestQuest == 1) goto L_Finished;
+
+ mes "[Chest]";
mes "Would you try to open it?";
next;
- menu "Yup",L_1,"Nope",L_2;
+ menu
+ "Yes", L_Yes,
+ "No", -;
+ close;
-L_1:
- if(countitem(537)<3)goto L_3;
- delitem 537,3;
- getitem 536,1;
- mes "[Chest]";
+L_Yes:
+ if(countitem(537) < 3) goto L_Not_Enough;
+ delitem 537, 3;
+ getitem 536, 1;
+ mes "[Chest]";
mes "You opened it and found a short sword!";
- set ChestQuest,1;
+ set ChestQuest, 1;
close;
-
-L_2:
- close;
-
-L_3:
+
+L_Not_Enough:
mes "It seems that this is not the right key...";
close;
- done:
+
+L_Finished:
mes "[Chest]";
mes "You already opened this chest.";
close;
-
}
diff --git a/npc/new_5-1-cave2/monsters.txt b/npc/new_5-1-cave2/monsters.txt
new file mode 100644
index 00000000..0b8f967b
--- /dev/null
+++ b/npc/new_5-1-cave2/monsters.txt
@@ -0,0 +1,20 @@
+// Map: new_5-1
+// This is the Desert Mines south of Tulimshar -- level 2.
+//
+
+new_5-1.gat,0,0,0,0 monster Spider 1012,10,2500,0,Mob5::OnSpider
+new_5-1.gat,0,0,0,0 monster YellowSlime 1007,25,2500,0,Mob5::OnYellowSlime
+
+new_5-1.gat,0,0,0 script Mob5 -1,{
+OnSpider:
+ set @mobID, 1012;
+ callfunc "MobPoints";
+ break;
+
+OnYellowSlime:
+ set @mobID, 1007;
+ callfunc "MobPoints";
+ break;
+
+ end;
+}
diff --git a/npc/cave1/passages.txt b/npc/new_5-1-cave2/passages.txt
index ec363db0..ec363db0 100644
--- a/npc/cave1/passages.txt
+++ b/npc/new_5-1-cave2/passages.txt
diff --git a/npc/new_6-1-arena/guards.txt b/npc/new_6-1-arena/guards.txt
new file mode 100644
index 00000000..065ed765
--- /dev/null
+++ b/npc/new_6-1-arena/guards.txt
@@ -0,0 +1,28 @@
+//
+
+new_6-1.gat,77,37,0 script Phaet 125,{
+ mes "[Phaet the Royal Guard]";
+ mes "\"Do you want to go back?\"";
+ next;
+
+ menu
+ "Yes", L_Sure,
+ "No", -;
+ mes "Have fun.";
+ close;
+
+L_Sure:
+ mes "[Phaet the Royal Guard]";
+ mes "\"Ok.\"";
+ next;
+
+ warp "new_8-1.gat", 25, 23;
+ close;
+}
+
+new_6-1.gat,69,37,0 script Aradin 126,{
+ mes "[Aradin the Royal Guard]";
+ mes "\"Don't touch me...";
+ mes "You wouldn't enjoy the consequences.\"";
+ close;
+}
diff --git a/npc/new_6-1-arena/monsters.txt b/npc/new_6-1-arena/monsters.txt
new file mode 100644
index 00000000..51d72132
--- /dev/null
+++ b/npc/new_6-1-arena/monsters.txt
@@ -0,0 +1,14 @@
+// Map: new_6-1
+// This is the Tulimshar Arena -- below Tulimshar.
+//
+
+new_6-1.gat,0,0,0,0 monster Maggot 1002,10,0,0,Mob6::OnMaggot
+
+new_6-1.gat,0,0,0 script Mob6 -1,{
+OnMaggot:
+ set @mobID, 1002;
+ callfunc "MobPoints";
+ break;
+
+ end;
+} \ No newline at end of file
diff --git a/npc/pvp/maps.txt b/npc/new_6-1-arena/pvpflag.txt
index bd5a034c..361e062b 100644
--- a/npc/pvp/maps.txt
+++ b/npc/new_6-1-arena/pvpflag.txt
@@ -1 +1 @@
-new_6-1.gat mapflag pvp
+new_6-1.gat mapflag pvp
diff --git a/npc/new_7-1-eastern-desert/monsters.txt b/npc/new_7-1-eastern-desert/monsters.txt
new file mode 100644
index 00000000..c2ec4c71
--- /dev/null
+++ b/npc/new_7-1-eastern-desert/monsters.txt
@@ -0,0 +1,20 @@
+// Map: new_7-1
+// This is the Snake Desert.
+//
+
+new_7-1.gat,0,0,0,0 monster Maggot 1002,20,0,0,Mob7::OnMaggot
+new_7-1.gat,0,0,0,0 monster Snake 1010,20,0,0,Mob7::OnSnake
+
+new_7-1.gat,0,0,0 script Mob7 -1,{
+OnMaggot:
+ set @mobID, 1002;
+ callfunc "MobPoints";
+ break;
+
+OnSnake:
+ set @mobID, 1010;
+ callfunc "MobPoints";
+ break;
+
+ end;
+}
diff --git a/npc/eastern-desert/npcs.txt b/npc/new_7-1-eastern-desert/npcs.txt
index c9561c4b..8b3d1d0a 100644
--- a/npc/eastern-desert/npcs.txt
+++ b/npc/new_7-1-eastern-desert/npcs.txt
@@ -1,15 +1,17 @@
+//
+
new_7-1.gat,69,76,0 shop George 115,530:3000,1199:3,529:5,539:175,562:500
new_7-1.gat,66,75,0 script Kieron 132,{
mes "[Kieron]";
- mes "Be careful if you're going in that cave,";
- mes "it's packed full of monsters.";
+ mes "\"Be careful if you're going in that cave,";
+ mes "it's packed full of monsters.\"";
close;
}
new_7-1.gat,91,23,0 script William 131,{
mes "[William]";
- mes "Going in the cave?";
- mes "You better watch your step, last time I checked it was full of monsters!";
+ mes "\"Going in the cave?";
+ mes "You better watch your step, last time I checked it was full of monsters!\"";
close;
}
diff --git a/npc/new_7-1-eastern-desert/passages.txt b/npc/new_7-1-eastern-desert/passages.txt
new file mode 100644
index 00000000..f0850ca1
--- /dev/null
+++ b/npc/new_7-1-eastern-desert/passages.txt
@@ -0,0 +1,21 @@
+new_2-1.gat,36,30 warp caveexit 3,0,new_1-1.gat,25,95
+new_1-1.gat,19,94 warp caveentrance 1,1,new_2-1.gat,37,31
+new_1-1.gat,111,79 warp eastdesert 2,2,new_7-1.gat,23,40
+new_7-1.gat,18,39 warp westdesert 3,4,new_1-1.gat,106,78
+new_7-1.gat,89,23 warp tosnakecaveN 0,0,new_22-1.gat,52,34
+new_7-1.gat,71,75 warp tosnakecaveS 0,0,new_22-1.gat,33,83
+new_7-1.gat,162,103 warp toMountainPass 0,0,new_24-1.gat,20,33
+new_7-1.gat,163,102 warp toMountainPass 0,0,new_24-1.gat,21,32
+new_7-1.gat,164,101 warp toMountainPass 0,0,new_24-1.gat,22,31
+new_7-1.gat,165,100 warp toMountainPass 0,0,new_24-1.gat,23,30
+new_7-1.gat,166,99 warp toMountainPass 0,0,new_24-1.gat,24,29
+new_7-1.gat,167,98 warp toMountainPass 0,0,new_24-1.gat,25,28
+new_7-1.gat,168,97 warp toMountainPass 0,0,new_24-1.gat,26,27
+new_7-1.gat,169,96 warp toMountainPass 0,0,new_24-1.gat,27,26
+new_7-1.gat,170,95 warp toMountainPass 0,0,new_24-1.gat,28,25
+new_7-1.gat,171,94 warp toMountainPass 0,0,new_24-1.gat,29,24
+new_7-1.gat,172,93 warp toMountainPass 0,0,new_24-1.gat,30,23
+new_7-1.gat,173,92 warp toMountainPass 0,0,new_24-1.gat,31,22
+new_7-1.gat,174,91 warp toMountainPass 0,0,new_24-1.gat,32,21
+new_22-1.gat,52,33 warp fromsnakecaveN 0,0,new_7-1.gat,89,24
+new_22-1.gat,33,82 warp fromsnakecaveS 0,0,new_7-1.gat,71,76 \ No newline at end of file
diff --git a/npc/new_8-1-tulimshar/casino.txt b/npc/new_8-1-tulimshar/casino.txt
new file mode 100644
index 00000000..732f5898
--- /dev/null
+++ b/npc/new_8-1-tulimshar/casino.txt
@@ -0,0 +1,172 @@
+//
+
+new_8-1.gat,134,23,0 script Valdo 117,{
+ mes "[Valdo the Worker]";
+ mes "\"Please let me work, I'm really in a hurry!\"";
+ close;
+}
+
+new_8-1.gat,37,65,0 script Slot1 127,{
+ callfunc "SlotMachine";
+}
+
+new_8-1.gat,39,65,0 script Slot2 127,{
+ callfunc "SlotMachine";
+}
+
+new_8-1.gat,41,65,0 script Slot3 127,{
+ callfunc "SlotMachine";
+}
+
+new_8-1.gat,32,67,0 shop MoneyChanger 124,503:10
+
+new_8-1.gat,28,63,0 script BlackJack 107,{
+ mes "[Croupier]";
+ mes "\"Would you like to play Black Jack?";
+ mes "You will need 15 casino coins.\"";
+ next;
+
+ menu
+ "Yes", L_Begin,
+ "No", -;
+ mes "\"As you wish.\"";
+ close;
+
+L_Begin:
+ if(countitem(503) < 15) goto L_NoCoin;
+ delitem 503, 15;
+ set @croupier, rand(0, 4);
+ set @croupier, @croupier + 17;
+ set @player, rand(4, 21);
+ mes "\"You got " + @player + " with your cards.";
+ if(@player == 21) goto L_End;
+ mes "Do you want another card?\"";
+ next;
+
+ menu
+ "Yes", L_Another,
+ "No", L_End;
+
+L_Another:
+ set @tempace, rand(2, 11);
+ if (@tempace == 11) goto L_Ace;
+ set @player, @player + @tempace;
+ if (@player > 21) goto L_Lost;
+ if (@player == 21) goto L_End;
+ mes "\"You got " + @player + " with your cards.";
+ mes "Do you want another card?\"";
+ next;
+
+ menu
+ "Yes", L_Another,
+ "No", L_End;
+L_End:
+ if (@player <= @croupier) goto L_Lost;
+ mes "\"Congratulations, you won!";
+ mes "I had " + @croupier + ".";
+ mes "You get 50 casino coins.\"";
+ getitem 503, 50;
+ close;
+
+L_NoCoin:
+ mes "\"You need at least 15 coins.\"";
+ close;
+
+L_Lost:
+ mes "\"I'm sorry but you lost.";
+ mes "You got " + @player + " with your cards.";
+ mes "I had " + @croupier + ".\"";
+ close;
+
+L_Ace:
+ set @player, @player + 11;
+ if (@player > 21) set @player, @player - 10;
+ if (@player > 21) goto L_Lost;
+ if (@player == 21) goto L_End;
+ mes "You got " + @player + " with your cards.";
+ mes "Do you want another card?";
+ next;
+
+ menu
+ "Yes", L_Another,
+ "No", L_End;
+
+}
+
+new_8-1.gat,22,69,0 script Roulette 107,{
+ mes "\"Good evening monsieur...";
+ mes "How much would you like to bet?\"";
+ next;
+
+ menu
+ "1 coin", L_b1,
+ "5 coins", L_b5,
+ "10 coins", L_b10,
+ "50 coins", L_b50,
+ "100 coins", L_b100,
+ "Maybe I'll play later", L_Later;
+ mes "\"Rien ne va plus...\"";
+ close;
+
+L_b1:
+ set @bet, 1;
+ goto L_Check;
+
+L_b5:
+ set @bet, 5;
+ goto L_Check;
+
+L_b10:
+ set @bet, 10;
+ goto L_Check;
+
+L_b50:
+ set @bet, 50;
+ goto L_Check;
+
+L_b100:
+ set @bet, 100;
+ goto L_Check;
+
+L_Check:
+ if(countitem(503) < @bet) goto L_NoCoin;
+ delitem 503, @bet;
+ menu
+ "Choose a color", -,
+ "Choose a number", L_Number;
+ menu
+ "Black", -,
+ "Red", -;
+ set @color,rand(2);
+ if(@color == 1) goto L_Lost;
+ mes "You won!";
+ getitem 503, @bet * 2;
+ close;
+
+L_Number:
+ menu
+ "0", -, "00", -, "1", -, "2", -, "3", -, "4", -, "5", -, "6", -, "7", -, "8", -,
+ "9", -, "10", -, "11", -, "12", -, "13", -, "14", -, "15", -, "16", -, "17", -, "18", -,
+ "19", -, "20", -, "21", -, "22", -, "23", -, "24", -, "25", -, "26", -, "27", -, "28", -,
+ "29", -, "30", -, "31", -, "32", -, "33", -, "34", -, "35", -, "36", -;
+
+ if (@menu == 1) set @number, 0;
+ if (@menu == 2) set @number, 37;
+ if (@menu >= 3) set @number, @menu - 2;
+
+ set @roulette, rand(38);
+ if (@roulette == 37) mes "The ball stopped on 00";
+ if (@roulette < 37) mes "The ball stopped on " + @roulette;
+ if (@number != @roulette) goto L_Lost;
+ mes "\"You won!\"";
+ getitem 503, @bet * 10;
+ close;
+
+L_NoCoin:
+ mes "\"You don't have enough coins.\"";
+ close;
+
+L_Lost:
+ mes "\"I'm sorry, you lost.\"";
+ close;
+}
diff --git a/npc/new_8-1-tulimshar/omar.txt b/npc/new_8-1-tulimshar/omar.txt
new file mode 100644
index 00000000..25865e5f
--- /dev/null
+++ b/npc/new_8-1-tulimshar/omar.txt
@@ -0,0 +1,6 @@
+//
+
+new_8-1.gat,70,60,0 script Omar 162,{
+ mes "[Omar]";
+ mes "\"Welcome to my humble abode.\"";
+}
diff --git a/npc/new_8-1-tulimshar/passages.txt b/npc/new_8-1-tulimshar/passages.txt
new file mode 100644
index 00000000..43a7f9f7
--- /dev/null
+++ b/npc/new_8-1-tulimshar/passages.txt
@@ -0,0 +1,28 @@
+///////////////
+// Inn/Casino
+///////////////
+
+// Warps room 1
+new_8-1.gat,45,24 warp upstairs 0,2,new_8-1.gat,65,25
+new_8-1.gat,25,35 warp outside 0,0,new_3-1.gat,32,72
+
+// Warps room 2
+new_8-1.gat,65,25 warp downstairs 0,1,new_8-1.gat,42,25
+new_8-1.gat,68,22 warp tocasino 2,0,new_8-1.gat,32,72
+new_8-1.gat,67,31 warp tobedroom1 1,1,new_8-1.gat,102,23
+new_8-1.gat,76,31 warp tobedroom2 1,1,new_8-1.gat,130,23
+
+// Warps room 3
+new_8-1.gat,102,22 warp bedroom1tohall 2,0,new_8-1.gat,67,29
+
+// Warps room 4
+new_8-1.gat,130,22 warp bedroom2tohall 2,0,new_8-1.gat,76,29
+
+// Warps room 5
+new_8-1.gat,32,74 warp tohall 1,0,new_8-1.gat,68,23
+
+///////////////
+// Houses
+///////////////
+
+new_8-1.gat,71,73 warp outside 0,0,new_3-1.gat,75,42
diff --git a/npc/new_8-1-tulimshar/phaet.txt b/npc/new_8-1-tulimshar/phaet.txt
new file mode 100644
index 00000000..4cc13e9a
--- /dev/null
+++ b/npc/new_8-1-tulimshar/phaet.txt
@@ -0,0 +1,30 @@
+//
+
+new_8-1.gat,24,23,0 script Phaet 125,{
+ mes "[Phaet the Royal Guard]";
+ mes "\"Hey, you seem tough enough! Would you like to prove your skills? I'll let you in the arena if you give me 50 gp. You can fight against other players there.\"";
+ next;
+
+ menu
+ "Yes", L_Sure,
+ "No", -;
+
+ mes "[Phaet the Royal Guard]";
+ mes "\"Ha ha, coward.\"";
+ close;
+
+L_Sure:
+ if (zeny < 50) goto L_NoMoney;
+ set zeny, zeny - 50;
+
+ mes "[Phaet the Royal Guard]";
+ mes "\"Get ready!\"";
+ next;
+
+ warp "new_6-1.gat", 0, 0;
+ close;
+
+L_NoMoney:
+ mes "\"Wait a second, you don't have enough money.\"";
+ close;
+}
diff --git a/npc/new_8-1-tulimshar/shops.txt b/npc/new_8-1-tulimshar/shops.txt
new file mode 100644
index 00000000..8482edd9
--- /dev/null
+++ b/npc/new_8-1-tulimshar/shops.txt
@@ -0,0 +1,9 @@
+//
+
+new_8-1.gat,26,26,0 shop InnKeeper 112,539:175,513:20,519
+
+new_8-1.gat,103,26,0 script Rebecca 118,{
+ set @npcName$, "Rebecca the Inn Keeper";
+ set @cost, 100;
+ callfunc "Inn";
+}
diff --git a/npc/new_8-1-tulimshar/troupe_leader.txt b/npc/new_8-1-tulimshar/troupe_leader.txt
new file mode 100644
index 00000000..a602b1d2
--- /dev/null
+++ b/npc/new_8-1-tulimshar/troupe_leader.txt
@@ -0,0 +1,43 @@
+//
+
+new_8-1.gat,34,25,0 script Troupe Leader 165,{
+ if (Inspector == 4) goto L_NohMask_Troupe;
+ if (Inspector == 13) goto L_NohMask_Found;
+
+ mes "[Troupe Leader]";
+ mes "\"Hello. I'm the leader of a traveling theater troupe. We'll be staying here in Tulimshar for a while.\"";
+ close;
+
+L_NohMask_Troupe:
+ mes "[Troupe Leader]";
+ mes "\"Yes, a mask was stolen from us the last night we were in Hurnscald.\"";
+ next;
+ menu
+ "Any ideas on who might have taken it?", L_NohMask_Idea,
+ "Are you sure one of your troupe members didn't hide it and commit those robberies?", L_NohMask_Accuse,
+ "Hmm...", -;
+ close;
+
+L_NohMask_Idea:
+ set Inspector, 5;
+ mes "[Troupe Leader]";
+ mes "\"Hm...I did see an old man hang out near the theater after our last show.\"";
+ close;
+
+L_NohMask_Accuse:
+ mes "[Troupe Leader]";
+ mes "\"I am absolutely positive. None of my troupe have left the city since we got here. Good day!\"";
+ close;
+
+L_NohMask_Found:
+ mes "[Troupe Leader]";
+ mes "\"Thank you for finding the mask. You did such a good job, you should keep it.\"";
+ mes "[1500 experience points]";
+ getexp 1500, 0;
+ next;
+ set Inspector, 14;
+ getitem 678, 1;
+ mes "[Troupe Leader]";
+ mes "\"We don't need it anymore. We're doing different shows here.\"";
+ close;
+}
diff --git a/npc/new_9-1-woodland/alchemist.txt b/npc/new_9-1-woodland/alchemist.txt
new file mode 100644
index 00000000..ed6582fa
--- /dev/null
+++ b/npc/new_9-1-woodland/alchemist.txt
@@ -0,0 +1,717 @@
+// This NPC makes potions and dyes
+new_9-1.gat,117,77,0 script Rauk 103,{
+
+ // Setzer quest/monster oil quest participation
+ set @SETZER_INITIAL, 0;
+ set @SETZER_KNOWS_OIL, 1;
+ set @SETZER_KNOWS_STINGER, 2;
+
+ set @Q_MASK, NIBBLE_3_MASK;
+ set @Q_SHIFT, NIBBLE_3_SHIFT;
+
+ set @Q_status, (QUEST_Forestbow_state & @Q_MASK) >> @Q_SHIFT;
+ // End of Setzer quest/monster oil quest participation
+
+ set @RED, 683;
+ set @YELLOW, 682;
+ set @BLUE, 681;
+ set @MAUVE, 680;
+ set @PETAL, 565;
+ set @PEARL, 700;
+ set @ORE, 640;
+ set @MAGGOTSLIME, 505;
+
+ set @QUEST_CAN_GET_DYE_HERE, 2;
+ set @QUEST_HAS_SOLVED_DYE_PUZZLE, 3;
+ set @QUEST_GUESS_BASE, 4;
+
+ set @CHOICE_IRON, 0;
+ set @CHOICE_CONCENTRATION, 1;
+ set @CHOICE_DYEING_INTRO, 2;
+ set @CHOICE_DYE, 3;
+ set @CHOICE_MONSTER_OIL, 4;
+ set @CHOICE_ABORT, 5;
+
+ setarray @menuitems$, "", "", "", "", "";
+ set @c, 0;
+
+ set @menuitems$[@c], "Iron potion.";
+ set @menuID[@c], @CHOICE_IRON;
+ set @c, @c + 1;
+
+ set @menuitems$[@c], "Concentration potion.";
+ set @menuID[@c], @CHOICE_CONCENTRATION;
+ set @c, @c + 1;
+
+ if (QUEST_clothdyer_knowsdye >= @QUEST_CAN_GET_DYE_HERE)
+ goto L_skip_introducing;
+
+ mes "[Rauk the Alchemist]";
+ mes "\"I'm learning the ancient science of the alchemy.";
+ mes "I already know how to create a couple of potions!!\"";
+ next;
+
+ mes "[Rauk the Alchemist]";
+ mes "\"Do you want me to create one for you?\"";
+ next;
+
+ if (QUEST_clothdyer_knowsdye == 1)
+ goto L_pre_dyeing;
+
+ goto L_certain_condition;
+
+L_skip_introducing:
+ mes "[Rauk the Alchemist]";
+ mes "\"Hello, welcome back! Are you interested in dyes again, or in one of my potions?\"";
+ next;
+
+ set @menuitems$[@c], "Dye, please.";
+ set @menuID[@c], @CHOICE_DYE;
+ set @c, @c + 1;
+
+ goto L_certain_condition;
+
+L_pre_dyeing:
+ set @menuitems$[@c], "Actually, can you make dye?";
+ set @menuID[@c], @CHOICE_DYEING_INTRO;
+ set @c, @c + 1;
+
+L_certain_condition:
+ if (@Q_status == @SETZER_INITIAL)
+ goto L_main_menu;
+ set @menuitems$[@c], "Can you make monster oil?";
+ set @menuID[@c], @CHOICE_MONSTER_OIL;
+ set @c, @c + 1;
+
+L_main_menu:
+ set @menuitems$[@c], "No thanks.";
+ set @menuID[@c], @CHOICE_ABORT;
+ set @c, @c + 1;
+
+ menu
+ @menuitems$[0], -,
+ @menuitems$[1], -,
+ @menuitems$[2], -,
+ @menuitems$[3], -,
+ @menuitems$[4], -;
+
+ set @menu, @menu - 1;
+
+ if (@menu >= @c) goto L_abort;
+ if (@menuID[@menu] == @CHOICE_IRON) goto L_iron;
+ if (@menuID[@menu] == @CHOICE_CONCENTRATION) goto L_concentration;
+ if (@menuID[@menu] == @CHOICE_DYEING_INTRO) goto L_dyeing_intro;
+ if (@menuID[@menu] == @CHOICE_DYE) goto L_pick_colour;
+ if (@menuID[@menu] == @CHOICE_MONSTER_OIL) goto L_monster_oil;
+ if (@menuID[@menu] == @CHOICE_ABORT) goto L_abort;
+
+L_iron:
+ if(countitem(566) < 20) goto L_no_iron;
+ mes "[Rauk the Alchemist]";
+ mes "\"Great! You brought me exactly what I need!";
+ mes "Here is your Iron potion.\"";
+ delitem 566,20;
+ getitem 567,1;
+ close;
+
+L_concentration:
+ if(countitem(565) < 20) goto L_no_concentration;
+ mes "[Rauk the Alchemist]";
+ mes "\"Great! You brought me exactly what I need!";
+ mes "Here is your Concentration potion.\"";
+ delitem 565,20;
+ getitem 568,1;
+ close;
+
+L_no_iron:
+ mes "\"You have to bring me 20 small mushrooms.\"";
+ close;
+
+L_no_concentration:
+ mes "\"You have to bring me 20 petals.\"";
+ close;
+
+L_dyeing_intro:
+ mes "[Rauk the Alchemist]";
+ mes "Rauk pauses for a moment.";
+ mes "\"Hmm, I'm not very good at that... I can only make simple dyes, the ones that you can use for cotton and wool.\"";
+ next;
+ mes "[Rauk the Alchemist]";
+ mes "\"For the truly powerful ones that you can use to dye a person or an entire lake with, I would need a powerful catalyst, like an Obsidian Spork or a Wumpus Egg...\"";
+ mes "Rauk seems to be lost in his thoughts.";
+ next;
+ menu "I only want to dye clothes, though...", -,
+ "What's a 'Wumpus egg'?", L_wumpus_egg_intro,
+ "What's an 'Obsidian Spork'?", L_obsidian_spork_intro,
+ "Er, never mind...", L_abort;
+ mes "[Rauk the Alchemist]";
+ mes "\"Oh, just for clothes? Well, that is easy. I can make red, yellow, light blue, orange, pink, green, dark blue, black and purple dye, if you can get me the ingredients for it.\"";
+ next;
+ set QUEST_clothdyer_knowsdye, 2;
+ goto L_pick_colour;
+
+L_wumpus_egg_intro:
+ mes "[Rauk the Alchemist]";
+ mes "Rauk's eyes brighten up.";
+ mes "\"Ah, a wumpus egg is one of the most powerful catalysts out there, useful for transmutation and transchromation! Unfortunately the Common Wumpus is almost completely extinct these days, so they are hard to find.";
+ mes "Should you find one, please let me know-- I will pay well for one!\"";
+ next;
+ close;
+
+L_obsidian_spork_intro:
+ mes "[Rauk the Alchemist]";
+ mes "Rauk scratches his head.";
+ mes "\"Hm, obsidian is a dark, glass-like material that you can normally find near volcanos. Shaping it isn't too hard, but shaping it without it losing its magical properties is almost impossible.\"";
+ next;
+ mes "[Rauk the Alchemist]";
+ mes "\"Obsidian sporks are therefore hard to make, but they are said to be very useful in certain kinds of alchemy.";
+ mes "Should you find one, please let me know!\"";
+ next;
+ close;
+
+L_pick_colour:
+ menu "What are the ingredients you need?", L_description,
+ "Red", L_red,
+ "Yellow", L_yellow,
+ "Light blue", L_light_blue,
+ "Green", L_green,
+ "Orange", L_orange,
+ "Pink", L_pink,
+ "Dark blue", L_dark_blue,
+ "Black", L_black,
+ "Purple", L_purple,
+ "Dark Green", L_dark_green,
+ "Nothing, really.", L_abort;
+ close;
+
+L_description:
+ mes "[Rauk the Alchemist]";
+ mes "\"The kinds of dyes I know are made from herbs-- alizarin for red, gamboge for yellow, cobalt for blue, and mauve as binding agent for dark colors.\"";
+ next;
+ mes "[Rauk the Alchemist]";
+ mes "\"Some of the colors need more ingredients, including some that you can't find here, so I have to charge money for them.";
+ mes "Oh, and for a proper dark blue and purple I also need a pearl; without pearl dust they would not shimmer properly.\"";
+ next;
+
+L_description_quick:
+ menu "What do you need for red dye?", L_d_red,
+ "What do you need for yellow dye?", L_d_yellow,
+ "What do you need for light blue dye?", L_d_light_blue,
+ "What do you need for green dye?", L_d_green,
+ "What do you need for orange dye?", L_d_orange,
+ "What do you need for pink dye?", L_d_pink,
+ "What do you need for dark blue dye?", L_d_dark_blue,
+ "What do you need for black dye?", L_d_black,
+ "What do you need for purple dye?", L_d_purple,
+ "What do you need for dark green dye?", L_d_dark_green,
+ "Actually...", -;
+
+ menu "Can you make some dye for me, please?", L_pick_colour,
+ "Where can I get the herbs?", L_d_herbs,
+ "Where can I find petals?", L_d_petals,
+ "Where can I find iron ore?", L_d_ore,
+ "Where can I find a pearl?", L_d_pearl,
+ "Where can I find maggot slime?", L_d_maggot_slime,
+ "I see. Thank you, and a good day to you!", L_abort;
+ close;
+
+L_d_herbs:
+ mes "[Rauk the Alchemist]";
+ mes "\"Alizarin, mauve, cobalt and gamboge bushes grow in this general area. I haven't seen them nearby, but take a look around; I am sure you will find some.\"";
+ next;
+ goto L_description_quick;
+
+L_d_petals:
+ mes "[Rauk the Alchemist]";
+ mes "\"Just take some from the flowers around here. But be careful, they seem to be a bit fond of them.\"";
+ next;
+ goto L_description_quick;
+
+L_d_ore:
+ mes "[Rauk the Alchemist]";
+ mes "\"Iron ore you should be able to find in some mine, I think. That's where people usually get it from, I have been told.\"";
+ next;
+ goto L_description_quick;
+
+L_d_pearl:
+ mes "[Rauk the Alchemist]";
+ mes "\"A pearl... hm, that might be tricky. You normally find them in clams, but I haven't seen many of those here in the woodlands.\"";
+ next;
+ goto L_description_quick;
+
+L_d_maggot_slime:
+ mes "[Rauk the Alchemist]";
+ mes "\"As the name might have given away already, maggot slime is most easily obtained from maggots. Still, there are some other creatures-- such as bats-- that secrete a similar kind of slime that for alchemistic purposes is equivalent.\"";
+ next;
+ goto L_description_quick;
+
+L_intermediate:
+ menu "Can you make some dye for me?", L_pick_colour,
+ "Can you describe the ingredients?", L_description_quick,
+ "Never mind.", L_abort;
+ close;
+
+L_ok:
+ mes "[Rauk the Alchemist]";
+ mes "\"Here is your dye. Remember to use all of it at once or the color may bleach out.\"";
+ next;
+ goto L_pick_colour;
+
+L_red:
+ if (countitem(@RED) < 10) goto L_red_fail;
+ delitem @RED, 10;
+ getitem 690, 1;
+ goto L_ok;
+
+L_red_fail:
+ mes "[Rauk the Alchemist]";
+ mes "\"Hmm, sorry, but I do need ten alizarin leaves to make red dye.\"";
+ next;
+ goto L_intermediate;
+
+L_d_red:
+ mes "[Rauk the Alchemist]";
+ mes "\"Red dye is fairly simple to make. Bring me ten leaves of alizarin, and I can brew it for you right away.\"";
+ next;
+ goto L_intermediate;
+
+L_yellow:
+ if (countitem(@YELLOW) < 10) goto L_yellow_fail;
+ delitem @YELLOW, 10;
+ getitem 693, 1;
+ goto L_ok;
+
+L_yellow_fail:
+ mes "[Rauk the Alchemist]";
+ mes "\"Without enough gamboge leaves-- I would need at least ten--, I can't make yellow dye for you.\"";
+ next;
+ goto L_intermediate;
+
+L_d_yellow:
+ mes "[Rauk the Alchemist]";
+ mes "\"Yellow dye is no more than gamboge extract. If you get me ten gamboge leaves, I can make it easily.\"";
+ next;
+ goto L_intermediate;
+
+L_light_blue:
+ if (countitem(@BLUE) < 10) goto L_light_blue_fail;
+ delitem @BLUE, 10;
+ getitem 694, 1;
+ goto L_ok;
+
+L_light_blue_fail:
+ mes "[Rauk the Alchemist]";
+ mes "\"Sorry, but I won't give it to you for less than ten cobalt leaves.\"";
+ next;
+ goto L_intermediate;
+
+L_d_light_blue:
+ mes "[Rauk the Alchemist]";
+ mes "\"Light blue dye is what you get if you let cobalt leaves sit in alcohol over night. I have some here and will trade it for ten fresh cobalt leaves.\"";
+ next;
+ goto L_intermediate;
+
+L_green:
+ if (countitem(@BLUE) < 20) goto L_green_fail;
+ if (countitem(@YELLOW) < 20) goto L_green_fail;
+ if (zeny < 1000) goto L_green_fail;
+ delitem @BLUE, 20;
+ delitem @YELLOW, 20;
+ set zeny, zeny - 1000;
+ getitem 691, 1;
+ goto L_ok;
+
+L_green_fail:
+ mes "[Rauk the Alchemist]";
+ mes "\"No... I need enough gamboge and cobalt to make your dye.\"";
+ mes "\"Twenty gamboge leaves, twenty cobalt leaves, and 1000 GP should be sufficient.\"";
+ next;
+ goto L_intermediate;
+
+L_d_green:
+ mes "[Rauk the Alchemist]";
+ mes "\"Green dye is a little tricky to make, since you have to boil gamboge leaves at just the right temperature while stirring in a cobalt ester.";
+ mes "Making the cobalt ester is not easy, and every time I try I end up melting a crystal flask beyond repair...\"";
+ next;
+ mes "[Rauk the Alchemist]";
+ mes "\"Thus, I will need twenty gamboge leaves, twenty cobalt leaves, and 1000 GP for materials.";
+ next;
+ goto L_intermediate;
+
+L_orange:
+ if (countitem(@RED) < 10) goto L_orange_fail;
+ if (countitem(@YELLOW) < 10) goto L_orange_fail;
+ if (countitem(@ORE) < 2) goto L_orange_fail;
+ if (zeny < 1000) goto L_orange_fail;
+ delitem @RED, 10;
+ delitem @YELLOW, 10;
+ delitem @ORE, 2;
+ set zeny, zeny - 1000;
+ getitem 697, 1;
+ goto L_ok;
+
+L_orange_fail:
+ mes "[Rauk the Alchemist]";
+ mes "\"I'm sorry, but I need 1000 GP, two chunks of iron ore, and twenty each of gamboge and alizarin leaves.\"";
+ next;
+ goto L_intermediate;
+
+L_d_orange:
+ mes "[Rauk the Alchemist]";
+ mes "\"Orange dye is fun to make, but it requires some burnt iron, and also consummate sulphur powder, which you cannot get here easily.";
+ mes "\"Still, for 1000 GP, two pieces of iron ore, ten alizarin leaves and ten gamboge leaves, I can make you a vial of orange dye.\"";
+ next;
+ goto L_intermediate;
+
+L_pink:
+ if (countitem(@RED) < 10) goto L_pink_fail;
+ if (countitem(@PETAL) < 6) goto L_pink_fail;
+ if (zeny < 1000) goto L_pink_fail;
+ delitem @RED, 10;
+ delitem @PETAL, 6;
+ set zeny, zeny - 1000;
+ getitem 695, 1;
+ goto L_ok;
+
+L_pink_fail:
+ mes "[Rauk the Alchemist]";
+ mes "\"No, you don't have all I need, and that would be ten alizarin leaves, six flower petals, and 1000 GP.\"";
+ next;
+ goto L_intermediate;
+
+L_d_pink:
+ mes "[Rauk the Alchemist]";
+ mes "\"Pink dye... that's a funny one: you can't get proper pink out of the usual herbs. You do need ten leaves of alizarin, but you also need six pink flower petals.";
+ mes "To properly extract the pink from the petals, you have to boil it in concentrated utenum; I will have to charge 1000 GP for that.\"";
+ next;
+ goto L_intermediate;
+
+L_dark_blue:
+ if (countitem(@BLUE) < 100) goto L_dark_blue_fail;
+ if (countitem(@MAUVE) < 50) goto L_dark_blue_fail;
+ if (countitem(@PEARL) < 1) goto L_dark_blue_fail;
+ if (zeny < 10000) goto L_dark_blue_fail;
+ delitem @BLUE, 100;
+ delitem @MAUVE, 50;
+ delitem @PEARL, 1;
+ set zeny, zeny - 10000;
+ getitem 692, 1;
+ goto L_ok;
+
+L_dark_blue_fail:
+ mes "[Rauk the Alchemist]";
+ mes "\"I will need all of the ingredients to make dark blue dye for you.\"";
+ mes "\"I need 100 cobalt leaves, 50 mauve leaves, one pearl, and 10,000 GP.\"";
+ next;
+ goto L_intermediate;
+
+L_d_dark_blue:
+ mes "[Rauk the Alchemist]";
+ mes "\"Dark blue dye is one of the trickiest ones. You need concentrated extract from 100 leaves of cobalt and 50 mauve leaves for proper binding.";
+ mes "For the right shimmer, a pearl is indispensible, and the most expensive part is a rare kind of ayanamian sapphire dust that I have to charge 10,000 GP for.\"";
+ next;
+ goto L_intermediate;
+
+L_purple:
+ if (countitem(@BLUE) < 100) goto L_purple_fail;
+ if (countitem(@RED) < 100) goto L_purple_fail;
+ if (countitem(@MAUVE) < 20) goto L_purple_fail;
+ if (countitem(@PEARL) < 1) goto L_purple_fail;
+ if (zeny < 40000) goto L_purple_fail;
+ delitem @BLUE, 100;
+ delitem @RED, 100;
+ delitem @MAUVE, 20;
+ delitem @PEARL, 1;
+ set zeny, zeny - 40000;
+ getitem 698, 1;
+ goto L_ok;
+
+L_purple_fail:
+ mes "[Rauk the Alchemist]";
+ mes "\"No... I don't think that you have enough ingredients for this. Let me check my notes.\"";
+ mes "\"What I need are 100 cobalt leaves, 100 alizarin leaves, 20 mauve leaves, one pearl, and 40,000 GP.\"";
+ next;
+ goto L_intermediate;
+
+L_d_purple:
+ mes "[Rauk the Alchemist]";
+ mes "\"Hm, Purple dye... proper Tritan Purple is hard to make. Fortunately, the correct recipe has survived... but some ingredients are quite costly.";
+ mes "I can't even tell you why, unfortunately, since this is a bit of an alchemistic secret, and I really don't want to argue this out with people who can turn my nose into a rhubarb.\"";
+ next;
+ mes "[Rauk the Alchemist]";
+ mes "\"Still, I can make it for you, out of 100 cobalt leaves, 100 alizarin leaves, 20 mauve leaves, one pearl, and 40,000 GP. Some other ingredients are covered by the GP.\"";
+ next;
+ goto L_intermediate;
+
+L_black:
+ if (countitem(@BLUE) < 40) goto L_black_fail;
+ if (countitem(@RED) < 40) goto L_black_fail;
+ if (countitem(@YELLOW) < 40) goto L_black_fail;
+ if (countitem(@MAUVE) < 40) goto L_black_fail;
+ if (zeny < 20000) goto L_black_fail;
+ delitem @BLUE, 40;
+ delitem @RED, 40;
+ delitem @YELLOW, 40;
+ delitem @MAUVE, 40;
+ set zeny, zeny - 20000;
+ getitem 696, 1;
+ goto L_ok;
+
+L_black_fail:
+ mes "[Rauk the Alchemist]";
+ mes "\"I am sorry, but you don't have all the items I need to make black dye. I need fourty leaves of alizarin, cobalt, gamboge and mauve each, and 20,000 GP.\"";
+ next;
+ goto L_intermediate;
+
+L_d_black:
+ mes "[Rauk the Alchemist]";
+ mes "\"Black? Ah! such a wonderful choice of color. It's my favorite! Well, if you too want something black, I would be delighted to make you some black dye.";
+ mes "Just bring me 40 leaves each of cobalt, alizarin, gamboge and mauve.\"";
+ next;
+ mes "[Rauk the Alchemist]";
+ mes "\"Oh, and 20,000 GP for the charcoal and diamond dust mixture you need to keep the mauve smell out.\"";
+ next;
+ goto L_intermediate;
+
+L_dark_green:
+ if (QUEST_clothdyer_knowsdye != @QUEST_HAS_SOLVED_DYE_PUZZLE)
+ goto L_d_dark_green;
+ if (countitem(@BLUE) < 10) goto L_dark_green_fail;
+ if (countitem(@YELLOW) < 10) goto L_dark_green_fail;
+ if (countitem(@MAUVE) < 10) goto L_dark_green_fail;
+ if (countitem(@MAGGOTSLIME) < 1) goto L_dark_green_fail;
+ if (zeny < 1000) goto L_dark_green_fail;
+ delitem @BLUE, 10;
+ delitem @MAUVE, 10;
+ delitem @YELLOW, 10;
+ delitem @MAGGOTSLIME, 1;
+ set zeny, zeny - 1000;
+ getitem 699, 1;
+ goto L_ok;
+
+L_dark_green_fail:
+ mes "[Rauk the Alchemist]";
+ mes "Rauk frowns as he examines the items you hand him.";
+ mes "\"No, this will not do. I need ten gamboge leaves, ten cobalt leaves, ten mauve leaves, slime from one maggot, and 1000 GP.\"";
+ next;
+ goto L_intermediate;
+
+L_d_dark_green:
+ mes "[Rauk the Alchemist]";
+ if (QUEST_clothdyer_knowsdye != @QUEST_HAS_SOLVED_DYE_PUZZLE)
+ goto L_d_dark_green_quest;
+ mes "\"Since we have figured out how much maggot slime we need for you, all you have to bring me are 1000 GP, one maggot slime, and ten leaves each of mauve, cobalt, and gamboge.\"";
+ next;
+ goto L_intermediate;
+
+L_d_dark_green_quest:
+ mes "\"Ah, dark green... dark green dye is actually simple to make, except for one tiny little problem: dark green clothes fade very quickly when they touch human skin. By far the best way to fixate the color is argentum powder, mixed with dark green dye essence extracted from maggot slime.\"";
+ next;
+ mes "[Rauk the Alchemist]";
+ mes "\"But just how much maggot slime goes into the fixative and how much into the rest of the mixture varies completely for every individual. We will have to figure out just how many thousandth ounces it is for you before I can make dark green dye for you.\"";
+ next;
+ if (QUEST_clothdyer_knowsdye == @QUEST_CAN_GET_DYE_HERE)
+ set QUEST_clothdyer_knowsdye, (rand(1000) + @QUEST_GUESS_BASE);
+
+L_d_dark_green_q_main:
+ menu "Uh... no thanks.", L_intermediate,
+ "So nobody else can wear clothes I dye?", L_dark_green_q_wear,
+ "OK, what should I do?", L_dark_green_q_explain,
+ "Let's figure it out!", L_dark_green_q_guess_0;
+ close;
+
+L_dark_green_q_wear:
+ mes "[Rauk the Alchemist]";
+ mes "\"The color stabilises after a week or so.";
+ mes "Others can wear the clothes you have dyed-- just make sure that you wear those clothes for a week before passing them on.\"";
+ next;
+ goto L_d_dark_green_q_main;
+
+L_dark_green_q_explain2:
+ mes "[Rauk the Alchemist]";
+ mes "Rauk blinks.";
+ mes "\"Very well. It works like this: you give me a maggot slime and tell me how many thousandth parts go into one part of the dye potion.\"";
+ next;
+ mes "[Rauk the Alchemist]";
+ mes "\"Then we try whether that was the right ratio. I will tell you if you guessed right, but if you were wrong, I will tell you whether you guessed too high or too low.\"";
+ next;
+ mes "[Rauk the Alchemist]";
+ mes "\"With enough slimes and enough tries we should be able to figure out just how much you need.\"";
+ next;
+ menu "Er... can you explain that again?", L_dark_green_q_explain2,
+ "Let's do it!", L_dark_green_q_guess_0,
+ "I don't have time for this.", L_intermediate;
+ close;
+
+L_dark_green_q_explain:
+ mes "[Rauk the Alchemist]";
+ mes "\"We have to measure the balance between your light and your dark bile-- two of your humors-- and use that as the maggot slime concentration.\"";
+ mes "\"This will probably take several tries; for each try we need maggot slime from one maggot.\"";
+ next;
+ mes "[Rauk the Alchemist]";
+ mes "\"Each time you tell me how many thousandth parts of one ounce of the concentrate you want to use in the fixative. I will stir the mixture appropriately and put the rest of the slime into the base mixture. We then put the two together, and you dip your finger in.\"";
+ next;
+ mes "[Rauk the Alchemist]";
+ mes "\"If the mixture is too dark, then that means that we put too much maggot slime into the fixative. If it discolours, we put in too little. But if it retains its color, we are done.\"";
+ next;
+ mes "[Rauk the Alchemist]";
+ mes "Rauk smiles.";
+ mes "\"But don't worry, I will happily do all this for free-- I rather enjoy these little games.\"";
+ next;
+
+ menu "Er... can you explain that again?", L_dark_green_q_explain,
+ "Errr... what?", L_dark_green_q_explain2,
+ "Let's do it!", -,
+ "I don't have time for this.", L_intermediate;
+
+L_dark_green_q_guess_0:
+ if (countitem(@MAGGOTSLIME) < 1)
+ goto L_dark_green_q_noslime;
+ delitem @MAGGOTSLIME, 1;
+
+ mes "[Rauk the Alchemist]";
+ mes "Rauk fills your maggot slime into a small bottle and picks a glass bottle from within his robe.";
+ mes "\"Now we need to figure out just how many thousandths you need. First, tell me how many tenths of an ounce you want to put in.\"";
+ next;
+
+ menu "none", -,
+ "1 tenth", -,
+ "2 tenths", -,
+ "3 tenths", -,
+ "4 tenths", -,
+ "5 tenths", -,
+ "6 tenths", -,
+ "7 tenths", -,
+ "8 tenths", -,
+ "9 tenths", -;
+
+ set @menu, @menu - 1;
+ set @guess_accumulator, @menu * 100;
+
+ mes "[Rauk the Alchemist]";
+ if (@menu)
+ mes "Rauk pours a good-sized portion of maggot slime from the small bottle into the glass bottle.";
+ mes "\"We now have " + @guess_accumulator + " thousandths of an ounce. How many hundredths of an ounce should I add?\"";
+ next;
+
+ menu "none", -,
+ "1 hundredth", -,
+ "2 hundredths", -,
+ "3 hundredths", -,
+ "4 hundredths", -,
+ "5 hundredths", -,
+ "6 hundredths", -,
+ "7 hundredths", -,
+ "8 hundredths", -,
+ "9 hundredths", -;
+
+ set @menu, @menu - 1;
+ set @guess_accumulator, @guess_accumulator + (@menu * 10);
+
+ mes "[Rauk the Alchemist]";
+ if (@menu)
+ mes "Rauk pours a portion of maggot slime from the small bottle into the glass bottle.";
+ mes "\"These are now " + @guess_accumulator + " thousandths of an ounce. How many thousands more?\"";
+ next;
+
+ menu "none", -,
+ "1 thousandth", -,
+ "2 thousandths", -,
+ "3 thousandths", -,
+ "4 thousandths", -,
+ "5 thousandths", -,
+ "6 thousandths", -,
+ "7 thousandths", -,
+ "8 thousandths", -,
+ "9 thousandths", -;
+
+ set @menu, @menu - 1;
+ set @guess_accumulator, @guess_accumulator + @menu;
+
+ mes "[Rauk the Alchemist]";
+ if (@menu)
+ mes "Rauk pours a tiny amount of maggot slime from the small bottle into the glass bottle.";
+ mes "Rauk mixes some more ingredients into the bottles, stirs them, heats one of them and mixes the results together.";
+ next;
+
+ mes "[Rauk the Alchemist]";
+ mes "\"Please put your finger in.\"";
+ mes "Hesitantly. you stick your finger into the resulting brew. The mixture feels warm and smooth to the touch.";
+ next;
+ mes "[Rauk the Alchemist]";
+ mes "You pull your finger out again.";
+
+ if (@guess_accumulator + @QUEST_GUESS_BASE > QUEST_clothdyer_knowsdye)
+ goto L_dark_green_q_toomuch;
+
+ if (@guess_accumulator + @QUEST_GUESS_BASE < QUEST_clothdyer_knowsdye)
+ goto L_dark_green_q_toolittle;
+
+ // otherwise correct guess
+
+ mes "Nothing seems to be happening with the mixture. Rauk's eyes lighten up.";
+ mes "\"This is it! You need precisely " + @guess_accumulator + " thousandts. Let me write this down...\"";
+ next;
+ mes "[Rauk the Alchemist]";
+ mes "Rauk is beaming.";
+ mes "\"I can now make dark green dye for you. All I need will be slime from one maggot, ten gamboge leaves, ten cobalt leaves, ten mauve leaves, and 1000 GP for other ingredients.\"";
+ mes "[You gain 20,000 experience points]";
+ getexp 20000, 0;
+ set QUEST_clothdyer_knowsdye, @QUEST_HAS_SOLVED_DYE_PUZZLE;
+ next;
+ goto L_intermediate;
+
+L_dark_green_q_toomuch:
+ mes "After only a second, the mixture begins to blacken. Rauk frowns.";
+ mes "\"That was too much... you need fewer than " + @guess_accumulator + " thousandths, I think.";
+ goto L_dark_green_q_again;
+
+L_dark_green_q_toolittle:
+ mes "Almost instantaneously, the mixture loses its colour and turns transparent. Rauk sighs.";
+ mes "\"That was too little. Next time, try more than " + @guess_accumulator + " thousandths.";
+ goto L_dark_green_q_again;
+
+L_dark_green_q_again:
+ mes "\"Should we try again?\"";
+ next;
+ menu "Yes!", L_dark_green_q_guess_0,
+ "No, I've had enough.", -;
+ close;
+
+L_dark_green_q_noslime:
+ mes "[Rauk the Alchemist]";
+ mes "\"Oh, you don't have any maggot slime? That's unfortunate; I am out of it myself. Still it should be easy enough to find, just bring me one and we can continue testing.\"";
+ next;
+ goto L_intermediate;
+
+L_monster_oil:
+ mes "[Rauk the Alchemist]";
+ mes "Rauk locks his eyes with you and continues in more serious tone.";
+ mes "\"I know how to create it, but you won't get it from me. It's far too dangerous; even the best alchemist may need multiple attempts and will risk blowing up! I can give you a recipe though, if you still are wanton.\"";
+ next;
+ menu
+ "Yes, tell me!", -,
+ "No, that sounds too dangerous.", L_abort;
+ mes "[Rauk the Alchemist]";
+ mes "You will need a pearl, a pair of snake skins, two piles of volcanic ash, three black scorpion stingers-- and a golden scorpion stinger. In addition you must have plenty of herbs to stabilise the concoction; mauve, alizarin, cobalt and gamboge will do just fine.";
+ next;
+ mes "[Rauk the Alchemist]";
+ mes "\"Take the pearl, skins, black stingers, ash, and cook briefly in a cauldron. Next add the mauve/alizarin/cobalt/gamboge as needed to stabilise into a black brew. Lastly, add the golden scorpion stinger and let boil briefly. And it's done.\"";
+ next;
+ mes "[Rauk the Alchemist]";
+ mes "\"Good luck not blowing up!\"";
+
+ set @Q_status, @Q_status | @SETZER_KNOWS_STINGER;
+ callsub L_Update_Var;
+ close;
+
+L_abort:
+ close;
+
+
+L_Update_Var:
+ set QUEST_Forestbow_state,
+ (QUEST_Forestbow_state & ~(@Q_MASK)
+ | (@Q_status << @Q_SHIFT));
+ return;
+}
diff --git a/npc/new_9-1-woodland/monsters.txt b/npc/new_9-1-woodland/monsters.txt
new file mode 100644
index 00000000..52f1bc74
--- /dev/null
+++ b/npc/new_9-1-woodland/monsters.txt
@@ -0,0 +1,34 @@
+// Map: new_9-1
+// This is Central Woodland.
+//
+
+new_9-1.gat,0,0,0,0 monster EvilMushroom 1013,25,0,0,Mob9::OnEvilMushroom
+new_9-1.gat,0,0,0,0 monster Flower 1014,40,0,0,Mob9::OnFlower
+
+new_9-1.gat,0,0,0,0 monster Alizarin 1032,1,2700000,1800000,Mob9::OnAlizarin
+
+new_9-1.gat,0,0,0,0 monster SilkWorm 1035,2,60000,30000,Mob9::OnSilkWorm
+
+new_9-1.gat,0,0,0 script Mob9 -1,{
+OnEvilMushroom:
+ set @mobID, 1013;
+ callfunc "MobPoints";
+ break;
+
+OnFlower:
+ set @mobID, 1014;
+ callfunc "MobPoints";
+ break;
+
+OnAlizarin:
+ set @mobID, 1032;
+ callfunc "MobPoints";
+ break;
+
+OnSilkWorm:
+ set @mobID, 1035;
+ callfunc "MobPoints";
+ break;
+
+ end;
+}
diff --git a/npc/new_9-1-woodland/oscar.txt b/npc/new_9-1-woodland/oscar.txt
new file mode 100644
index 00000000..f33e0e47
--- /dev/null
+++ b/npc/new_9-1-woodland/oscar.txt
@@ -0,0 +1 @@
+new_9-1.gat,87,34,0 shop Oscar 142,535:25,657:40 \ No newline at end of file
diff --git a/npc/new_9-1-woodland/passages.txt b/npc/new_9-1-woodland/passages.txt
new file mode 100644
index 00000000..fa980cae
--- /dev/null
+++ b/npc/new_9-1-woodland/passages.txt
@@ -0,0 +1,5 @@
+new_9-1.gat,58,91 warp tofield 1,1,new_4-1.gat,15,15
+new_9-1.gat,47,102 warp tosouth 2,2,new_14-1.gat,50,25
+new_9-1.gat,124,61 warp warp1 1,3,new_18-1.gat,27,61
+new_9-1.gat,30,60 warp tomap29 0,3,new_29-1.gat,108,90
+new_9-1.gat,72,15 warp tomap26 2,1,new_26-1.gat,131,162
diff --git a/npc/savepoints/savepoints.txt b/npc/savepoints/savepoints.txt
deleted file mode 100644
index 259a9ffc..00000000
--- a/npc/savepoints/savepoints.txt
+++ /dev/null
@@ -1,132 +0,0 @@
-new_19-1.gat,51,39,0 script Milly 114, {
- mes "[Milly]";
- mes "This strange stone appeared here over night.";
- mes "Noone knows how it got here.";
- mes "It scares me. Better stay away from it.";
- close;
-}
-
-new_19-1.gat,53,40,0 script Soul Menhir 144, {
- mes "[Soul Menhir]";
- mes "(A mystical aura surrounds this stone. You feel mysteriously attracted to it. Something tells you to touch it. What do you do?)";
- next;
-
- menu "Touch it",-,"Leave it alone",close;
-
- if (Menhir_Activated == 1) goto L_Shortversion;
-
- mes "[Soul Menhir]";
- mes "(You touch the mysteriouse stone. Somehow it feels warm and cold at the same time.)";
- next;
-
-
- mes "[Soul Menhir]";
- mes "(Suddenly a strange sensation flows through you. It feels like your soul leaves your body and becomes one with the stone.)";
- next;
-
- mes "[Soul Menhir]";
- mes "(As suddenly as the feeling started it stops. The strange attraction is away from one moment to the next and the menhir feels like just an ordinary stone.)";
- next;
-
- set Menhir_Activated, 1;
- goto L_Save;
-
- L_Shortversion:
- mes "[Soul Menhir]";
- mes "(A strange sensation flows through you. It feels like your soul leaves your body and becomes one with the stone. as suddenly as the feeling started it stops.)";
- next;
-
- goto L_Save;
-
- L_Save:
- savepoint "new_19-1.gat", 53, 41;
-}
-
-
-new_3-1.gat,38,69,0 script Soul Menhir 144, {
- mes "[Soul Menhir]";
- mes "(A mystical aura surrounds this stone. You feel mysteriously attracted to it. Something tells you to touch it. What do you do?)";
- next;
-
- menu "Touch it",-,"Leave it alone",close;
-
- if (Menhir_Activated == 1) goto L_Shortversion;
-
- mes "[Soul Menhir]";
- mes "(You touch the mysteriouse stone. Somehow it feels warm and cold at the same time.)";
- next;
-
-
- mes "[Soul Menhir]";
- mes "(Suddenly a strange sensation flows through you. It feels like your soul leaves your body and becomes one with the stone.)";
- next;
-
- mes "[Soul Menhir]";
- mes "(As suddenly as the feeling started it stops. The strange attraction is away from one moment to the next and the menhir feels like just an ordinary stone.)";
- next;
-
- set Menhir_Activated, 1;
- goto L_Save;
-
- L_Shortversion:
- mes "[Soul Menhir]";
- mes "(A strange sensation flows through you. It feels like your soul leaves your body and becomes one with the stone. as suddenly as the feeling started it stops.)";
- next;
-
- goto L_Save;
-
- L_Save:
- savepoint "new_3-1.gat", 38, 70;
-}
-
-
-new_11-1.gat,66,90,0 script Geologist 103, {
- mes "[Geologist]";
- mes "This... stone...";
- mes "I have never seen a mineral like this";
- mes "before.";
- mes "And some strange... aura... seems to";
- mes "emit from it.";
- next;
- mes "Where did it come from?";
- mes "How did it got here?";
- mes "What's its purpose?";
- mes "I will solve its riddle for sure.";
- close;
-}
-
-new_11-1.gat,64,89,0 script Soul Menhir 144, {
- mes "[Soul Menhir]";
- mes "(A mystical aura surrounds this stone. You feel mysteriously attracted to it. Something tells you to touch it. What do you do?)";
- next;
-
- menu "Touch it",-,"Leave it alone",close;
-
- if (Menhir_Activated == 1) goto L_Shortversion;
-
- mes "[Soul Menhir]";
- mes "(You touch the mysteriouse stone. Somehow it feels warm and cold at the same time.)";
- next;
-
-
- mes "[Soul Menhir]";
- mes "(Suddenly a strange sensation flows through you. It feels like your soul leaves your body and becomes one with the stone.)";
- next;
-
- mes "[Soul Menhir]";
- mes "(As suddenly as the feeling started it stops. The strange attraction is away from one moment to the next and the menhir feels like just an ordinary stone.)";
- next;
-
- set Menhir_Activated, 1;
- goto L_Save;
-
- L_Shortversion:
- mes "[Soul Menhir]";
- mes "(A strange sensation flows through you. It feels like your soul leaves your body and becomes one with the stone. as suddenly as the feeling started it stops.)";
- next;
-
- goto L_Save;
-
- L_Save:
- savepoint "new_11-1.gat", 64, 90;
-} \ No newline at end of file
diff --git a/npc/snow-village/monsters.txt b/npc/snow-village/monsters.txt
deleted file mode 100644
index 7167168c..00000000
--- a/npc/snow-village/monsters.txt
+++ /dev/null
@@ -1 +0,0 @@
-new_11-1.gat,56,63,1,1 monster Maggot 1002,2,0,0,0
diff --git a/npc/snow-village/sexchanger.txt b/npc/snow-village/sexchanger.txt
deleted file mode 100644
index 7572865d..00000000
--- a/npc/snow-village/sexchanger.txt
+++ /dev/null
@@ -1,25 +0,0 @@
-new_11-1.gat,50,49,0 script Xanith 136,{
- mes "[Xanith the Surgeon]";
- mes "Are you tired of being what you are?";
- next;
-
- mes "[Xanith the Surgeon]";
- mes "Would you maybe be interested in a sex change?";
- next;
-
- mes "[Server]";
- mes "Warning: All the character in your account will get the sex changed.";
- mes "Also you probably will require to restart the client to notice a change.";
- next;
-
- menu
- "Please do, my dear...",xes,
- "Leave alone my family treasure!",nope;
-
-xes:
- changesex;
- close;
-
-nope:
- close;
-}
diff --git a/npc/snow-village/shops.txt b/npc/snow-village/shops.txt
deleted file mode 100644
index 4540cc4a..00000000
--- a/npc/snow-village/shops.txt
+++ /dev/null
@@ -1,38 +0,0 @@
-// Clothes shop
-new_13-1.gat,27,26,0 shop Taylor 137,523:2000,524:1600,543:800,544:5000,546:10000,586:1000,610,2000
-// Weapons shop
-new_13-1.gat,25,65,0 shop Bracco 135,1201:50,521:1000,522:100,545:20000,529:5
-// Potions shop
-new_13-1.gat,75,26,0 shop Mede 103,501:50,502:70,567:500,568:500
-
-// INN
-new_13-1.gat,111,23,0 script Kane 120,{
- mes "[Kane]";
- mes "Welcome strangers.";
- mes "What? You've already seen an INN like mine?";
- mes "That's impossible!";
- next;
-
- mes "[Kane]";
- mes "Would you like to rest? It's only 100 gp.";
- next;
-
- menu "Yes",-,"No",L_No;
- mes "Sleep well!";
- next;
-
- if (zeny < 100) goto L_NoMoney;
- set zeny,zeny-100;
- heal 10000,10000;
- close;
-
-L_No:
- mes "[Kane]";
- mes "See you.";
- close;
-
-L_NoMoney:
- mes "[Kane]";
- mes "Hey! You don't have enough money!";
- close;
-}
diff --git a/npc/snow-village/startrek.txt b/npc/snow-village/startrek.txt
deleted file mode 100644
index 7630a296..00000000
--- a/npc/snow-village/startrek.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-new_11-1.gat,79,77,0 script Kirk 133,{
-mes "[Capt. Kirk]";
-mes "Spock: We're breaking the prime directive.";
-mes "This is not the right way to have the first contact.";
-close;
-}
-
-new_11-1.gat,81,77,0 script Spock 134,{
-mes "[Spock]";
-mes "Live long and prosper captain.";
-next;
-mes "[Spock]";
-mes "trr...Spock to Scotty...";
-mes "Beam me to the elves village...";
-mes "I will hide there.";
-close;
-}
diff --git a/npc/south-east-woodland/monsters.txt b/npc/south-east-woodland/monsters.txt
deleted file mode 100644
index 88d143cd..00000000
--- a/npc/south-east-woodland/monsters.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-new_16-1.gat,0,0,0,0 monster Scorpion 1020,50,0,0,0
-new_16-1.gat,0,0,0,0 monster SleepFlower 1014,40,0,0,0
diff --git a/npc/south-east-woodland/passages.txt b/npc/south-east-woodland/passages.txt
deleted file mode 100644
index 11364119..00000000
--- a/npc/south-east-woodland/passages.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-new_16-1.gat,120,115 warp todesert 3,0,new_15-1.gat,20,15
-new_16-1.gat,22,54 warp towoodland 2,2,new_14-1.gat,127,53
diff --git a/npc/south-woodland/monsters.txt b/npc/south-woodland/monsters.txt
deleted file mode 100644
index 1fdf2b01..00000000
--- a/npc/south-woodland/monsters.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-new_14-1.gat,0,0,0,0 monster Scorpion 1003,50,0,0,0
-new_14-1.gat,0,0,0,0 monster Shroom 1019,50,0,0,0
-new_14-1.gat,0,0,0,0 monster Stumpy 1025,10,0,0,0 \ No newline at end of file
diff --git a/npc/south-woodland/passages.txt b/npc/south-woodland/passages.txt
deleted file mode 100644
index e6b31011..00000000
--- a/npc/south-woodland/passages.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-new_14-1.gat,131,53 warp tofield 2,2,new_16-1.gat,25,53
-new_14-1.gat,48,23 warp tofield 1,1,new_9-1.gat,46,99
diff --git a/npc/tulimshar-casino/casino.txt b/npc/tulimshar-casino/casino.txt
deleted file mode 100644
index 245bf899..00000000
--- a/npc/tulimshar-casino/casino.txt
+++ /dev/null
@@ -1,406 +0,0 @@
-// Warps room 1
-new_8-1.gat,45,24 warp upstairs 0,2,new_8-1.gat,65,25
-new_8-1.gat,25,36 warp outside 0,2,new_3-1.gat,33,73
-new_3-1.gat,32,72 warp inside 1,0,new_8-1.gat,25,34
-// Warps room 2
-new_8-1.gat,65,25 warp downstairs 0,1,new_8-1.gat,42,25
-new_8-1.gat,68,22 warp tocasino 2,0,new_8-1.gat,32,72
-new_8-1.gat,67,31 warp tobedroom1 1,1,new_8-1.gat,102,23
-new_8-1.gat,76,31 warp tobedroom2 1,1,new_8-1.gat,130,23
-// Warps room 3
-new_8-1.gat,102,22 warp bedroom1tohall 2,0,new_8-1.gat,67,29
-// Warps room 4
-new_8-1.gat,130,22 warp bedroom2tohall 2,0,new_8-1.gat,76,29
-// Warps room 5
-new_8-1.gat,32,74 warp tohall 1,0,new_8-1.gat,68,23
-
-new_8-1.gat,26,26,0 shop InnKeeper 112,539:175,513:20,519
-
-new_8-1.gat,103,26,0 script Rebecca 118,{
- if (zeny < 100) goto L_NoMoney;
- mes "[Rebecca the Waitress]";
- mes "Would you like to rest? It's only 100 gp.";
- next;
-
- menu "Yes",-,"No",L_No;
- mes "Sleep well!";
- next;
-
- set zeny,zeny-100;
- heal 10000,10000;
- close;
-
-L_No:
- mes "See you.";
- close;
-
-L_NoMoney:
- mes "Would you like to rest? Come back if you have at least 100 gp.";
- close;
-}
-
-new_8-1.gat,24,23,0 script Phaet 125,{
- mes "[Phaet the Royal Guard]";
- mes "Hey, you seem tough enough! Would you like to prove your skills? I'll let you in the arena if you give me 50 gp. You can fight against other players there.";
- next;
-
- if (zeny < 50) goto L_NoMoney;
- menu "Yes",-,"No",L_No;
- mes "Get ready!";
- next;
-
- set zeny,zeny-50;
- warp "new_6-1.gat",0,0;
- close;
-
-L_No:
- mes "Ha ha, coward.";
- close;
-
-L_NoMoney:
- mes "Wait a second, you don't have enough money.";
- close;
-}
-
-new_8-1.gat,134,23,0 script Valdo 117,{
- mes "[Valdo the Worker]";
- mes "Please let me work, I'm really in a hurry!";
- close;
-}
-
-new_8-1.gat,37,65,0 script Slot1 127,{
- mes "Pull the lever...";
- next;
- menu "Pull",L_Play,"Maybe later",-;
- close;
-
-L_Play:
- if(countitem(503) < 1) goto L_NoCoin;
- delitem 503,1;
- set @Temp1,rand(7);
- set @Temp2,rand(7);
- set @Temp3,rand(7);
- mes "Numbers: "+ @Temp1 +"/"+ @Temp2 +"/"+ @Temp3 +"";
- next;
-
- if(@Temp1 != @Temp2) goto L_Lost;
- if(@Temp2 != @Temp3) goto L_Lost;
- if(@Temp1 != @Temp3) goto L_Lost;
- mes "Congratulations! You won!";
- mes "You get 10 casino coins";
- getitem 503,10;
- close;
-
-L_Lost:
- mes "You lost!";
- close;
-
-L_NoCoin:
- mes "Insert coin";
- close;
-}
-
-new_8-1.gat,39,65,0 script Slot2 127,{
- mes "Pull the lever...";
- next;
- menu "Pull",L_Play,"Maybe later",-;
- close;
-
-L_Play:
- if(countitem(503) < 1) goto L_NoCoin;
- delitem 503,1;
- set @Temp1,rand(7);
- set @Temp2,rand(7);
- set @Temp3,rand(7);
- mes "Numbers: "+ @Temp1 +"/"+ @Temp2 +"/"+ @Temp3 +"";
- next;
-
- if(@Temp1 != @Temp2) goto L_Lost;
- if(@Temp2 != @Temp3) goto L_Lost;
- if(@Temp1 != @Temp3) goto L_Lost;
- mes "Congratulations! You won!";
- mes "You get 10 casino coins";
- getitem 503,10;
- close;
-
-L_Lost:
- mes "You lost!";
- close;
-
-L_NoCoin:
- mes "Insert coin";
- close;
-}
-
-new_8-1.gat,41,65,0 script Slot3 127,{
- mes "Pull the lever...";
- next;
- menu "Pull",L_Play,"Maybe later",-;
- close;
-
-L_Play:
- if(countitem(503) < 1) goto L_NoCoin;
- delitem 503,1;
- set @Temp1,rand(7);
- set @Temp2,rand(7);
- set @Temp3,rand(7);
- mes "Numbers: "+ @Temp1 +"/"+ @Temp2 +"/"+ @Temp3 +"";
- next;
-
- if(@Temp1 != @Temp2) goto L_Lost;
- if(@Temp2 != @Temp3) goto L_Lost;
- if(@Temp1 != @Temp3) goto L_Lost;
- mes "Congratulations! You won!";
- mes "You get 10 casino coins";
- getitem 503,10;
- close;
-
-L_Lost:
- mes "You lost!";
- close;
-
-L_NoCoin:
- mes "Insert coin";
- close;
-}
-
-new_8-1.gat,32,67,0 shop MoneyChanger 124,503:10
-
-new_8-1.gat,28,63,0 script BlackJack 107,{
- mes "[Croupier]";
- mes "Would you like to play Black Jack?";
- mes "You will need 15 casino coins";
- next;
-
- menu "Yes",-,"No",L_No;
- if(countitem(503) < 15) goto L_NoCoin;
- delitem 503,15;
- set @croupier,rand(0, 4);
- set @croupier,@croupier + 17;
- set @player,rand(4, 21);
- mes "You got " + @player + " with your cards.";
- mes "Do you want another card?";
- next;
-
- menu "Yes",L_Another,"No",L_End;
-
-L_Another:
- set @tempace,rand(2,11);
- if (@tempace == 11) goto L_Ace;
- set @player,@player+@tempace;
- if (@player > 21) goto L_Lost;
- mes "You got " + @player + " with your cards.";
- mes "Do you want another card?";
- next;
-
- menu "Yes",L_Another,"No",L_End;
-L_End:
- if (@player <= @croupier) goto L_Lost;
- mes "Congratulations, you won!";
- mes "I had " + @croupier + "";
- mes "You get 50 casino coins";
- getitem 503,50;
- close;
-
-L_No:
- mes "As you wish";
- close;
-
-L_NoCoin:
- mes "You need at least 15 coins";
- close;
-
-L_Lost:
- mes "I'm sorry but you lost";
- mes "You got " + @player + " with your cards.";
- mes "I had " + @croupier + "";
- close;
-
-L_Ace:
- set @player,@player + 11;
- if (@player > 21) set @player,@player - 10;
- if (@player > 21) goto L_Lost;
- mes "You got " + @player + " with your cards.";
- mes "Do you want another card?";
- next;
-
- menu "Yes",L_Another,"No",L_End;
-
-}
-
-new_8-1.gat,22,69,0 script Roulette 107,{
- mes "Good evening monsieur...";
- mes "How much would you like to bet?";
- next;
-
- menu "Maybe I'll play later",L_Later,"1 coin",-,"5 coins",L_b5,"10 coins",L_b10,"50 coins",L_b50,"100 coins",L_b100;
- set @bet,1;
- goto L_Check;
-L_b5:
- set @bet,5;
- goto L_Check;
-L_b10:
- set @bet,10;
- goto L_Check;
-L_b50:
- set @bet,50;
- goto L_Check;
-L_b100:
- set @bet,100;
- goto L_Check;
-
-L_Check:
- if(countitem(503) < @bet) goto L_NoCoin;
- menu "Choose a color",-,"Choose a number",L_Number;
- menu "Black",-,"Red",-;
- delitem 503,@bet;
- set @color,rand(2);
- if(@color == 1) goto L_Lost;
- mes "You won!";
- getitem 503,@bet * 2;
- close;
-
-L_Number:
- menu "0",-,"00",L00,"1",L1,"2",L2,"3",L3,"4",L4,"5",L5,"6",L6,"7",L7,
- "8",L8,"9",L9,"10",L10,"11",L11,"12",L12,"13",L13,"14",L14,"15",L15,
- "16",L16,"17",L17,"18",L18,"19",L19,"20",L20,"21",L21,"22",L22,
- "23",L23,"24",L24,"25",L25,"26",L26,"27",L27,"28",L28,"29",L29,
- "30",L30,"31",L31,"32",L32,"33",L33,"34",L34,"35",L35,"36",L36;
- set @number,0;
- goto L_CheckNumber;
-L00:
- set @number,37;
- goto L_CheckNumber;
-L1:
- set @number,1;
- goto L_CheckNumber;
-L2:
- set @number,2;
- goto L_CheckNumber;
-L3:
- set @number,3;
- goto L_CheckNumber;
-L4:
- set @number,4;
- goto L_CheckNumber;
-L5:
- set @number,5;
- goto L_CheckNumber;
-L6:
- set @number,6;
- goto L_CheckNumber;
-L7:
- set @number,7;
- goto L_CheckNumber;
-L8:
- set @number,8;
- goto L_CheckNumber;
-L9:
- set @number,9;
- goto L_CheckNumber;
-L10:
- set @number,10;
- goto L_CheckNumber;
-L11:
- set @number,11;
- goto L_CheckNumber;
-L12:
- set @number,12;
- goto L_CheckNumber;
-L13:
- set @number,13;
- goto L_CheckNumber;
-L14:
- set @number,14;
- goto L_CheckNumber;
-L15:
- set @number,15;
- goto L_CheckNumber;
-L16:
- set @number,16;
- goto L_CheckNumber;
-L17:
- set @number,17;
- goto L_CheckNumber;
-L18:
- set @number,18;
- goto L_CheckNumber;
-L19:
- set @number,19;
- goto L_CheckNumber;
-L20:
- set @number,20;
- goto L_CheckNumber;
-L21:
- set @number,21;
- goto L_CheckNumber;
-L22:
- set @number,22;
- goto L_CheckNumber;
-L23:
- set @number,23;
- goto L_CheckNumber;
-L24:
- set @number,24;
- goto L_CheckNumber;
-L25:
- set @number,25;
- goto L_CheckNumber;
-L26:
- set @number,26;
- goto L_CheckNumber;
-L27:
- set @number,27;
- goto L_CheckNumber;
-L28:
- set @number,28;
- goto L_CheckNumber;
-L29:
- set @number,29;
- goto L_CheckNumber;
-L30:
- set @number,30;
- goto L_CheckNumber;
-L31:
- set @number,31;
- goto L_CheckNumber;
-L32:
- set @number,32;
- goto L_CheckNumber;
-L33:
- set @number,33;
- goto L_CheckNumber;
-L34:
- set @number,34;
- goto L_CheckNumber;
-L35:
- set @number,35;
- goto L_CheckNumber;
-L36:
- set @number,36;
- goto L_CheckNumber;
-
-L_CheckNumber:
- delitem 503,@bet;
- set @roulette,rand(38);
- if (@roulette == 37) mes "We got a 00";
- if (@roulette < 37) mes "We got a " + @roulette;
- if (@number != @roulette) goto L_Lost;
- mes "You won!";
- getitem 503,@bet * 10;
- close;
-
-L_Later:
- mes "Rien ne va plus...";
- close;
-
-L_NoCoin:
- mes "You don't have enough coins";
- close;
-
-L_Lost:
- mes "I'm sorry, you lost";
- close;
-}
-
-
diff --git a/npc/tulimshar/banker.txt b/npc/tulimshar/banker.txt
deleted file mode 100644
index e17369d7..00000000
--- a/npc/tulimshar/banker.txt
+++ /dev/null
@@ -1 +0,0 @@
-new_3-1.gat,27,73,0 script Tybalt 107,{mes "[Tybalt the Banker]";mes "Welcome to the bank!";mes "How can I help you?";next;menu "Deposit",L_Dep,"Withdraw",L_With,"Nevermind that",L_Nev;L_Dep: mes "Sorry, but we're still moving inventory!"; close;L_With: mes "Sorry, but we're still moving inventory!"; close;L_Nev: mes "Goodbye then"; close;}
diff --git a/npc/tulimshar/barber.txt b/npc/tulimshar/barber.txt
deleted file mode 100644
index eea7f175..00000000
--- a/npc/tulimshar/barber.txt
+++ /dev/null
@@ -1,113 +0,0 @@
-new_3-1.gat,102,31,0 script Nicolas 100,{
- mes "[Nicolas the Barber]";
- mes "I'm the greatest barber in the whole mana world! Would you like a change of style or color?";
- next;
-
- menu
- "Change my style",style,
- "Change my color",color,
- "Nah I'm fine",fine;
-
-style:
- if (Sex == 0) goto style_female;
-
-style_male:
- menu
- "bald",style0,
- "ponytail",style1,
- "bowl cut",style2,
- "combed back",style3,
- "emo",style4,
- "mohawk",style5,
- "pompadour",style6,
- "center parting",style7;
-
-style_female:
- menu
- "bald",style0,
- "long and slick",style1,
- "short and curly",style2,
- "ponytail",style3,
- "pigtails",style4,
- "long and curly",style5,
- "parted",style6,
- "short and slick",style7;
-
-style0:
- setlook 1,0;
- close;
-style1:
- setlook 1,1;
- close;
-style2:
- setlook 1,2;
- close;
-style3:
- setlook 1,3;
- close;
-style4:
- setlook 1,4;
- close;
-style5:
- setlook 1,5;
- close;
-style6:
- setlook 1,6;
- close;
-style7:
- setlook 1,7;
- close;
-style8:
- setlook 1,8;
- close;
-
-color:
- menu
- "brunette",color0,
- "green",color1,
- "dark red",color2,
- "light purple",color3,
- "gray",color4,
- "blonde",color5,
- "teal",color6,
- "light red",color7,
- "blue",color8,
- "dark purple",color9;
-
-fine:
- close;
-
-color0:
- setlook 6,0;
- close;
-color1:
- setlook 6,1;
- close;
-color2:
- setlook 6,2;
- close;
-color3:
- setlook 6,3;
- close;
-color4:
- setlook 6,4;
- close;
-color5:
- setlook 6,5;
- close;
-color6:
- setlook 6,6;
- close;
-color7:
- setlook 6,7;
- close;
-color8:
- setlook 6,8;
- close;
-color9:
- setlook 6,9;
- close;
-color10:
- setlook 6,10;
- close;
-} \ No newline at end of file
diff --git a/npc/tulimshar/children.txt b/npc/tulimshar/children.txt
deleted file mode 100644
index 3fc41f98..00000000
--- a/npc/tulimshar/children.txt
+++ /dev/null
@@ -1,93 +0,0 @@
-new_3-1.gat,57,70,0 script Aisha 108,{
- set @TEMP,rand(7);
- if(@TEMP == 1) goto L_1;
- if(@TEMP == 2) goto L_2;
- if(@TEMP == 3) goto L_3;
- if(@TEMP == 4) goto L_4;
- if(@TEMP == 5) goto L_5;
- if(@TEMP == 6) goto L_6;
- if(@TEMP == 7) goto L_7;
- if(@TEMP == 0) goto L_1;
-
-L_1:
- mes "[Aisha]";
- mes "Maggots are soo slimey!";
- close;
-
-L_2:
- mes "[Aisha]";
- mes "Want to play ball with me?";
- close;
-
-L_3:
- mes "[Aisha]";
- mes "Monsters roam the land, i hate scorpions!";
- close;
-
-L_4:
- mes "[Aisha]";
- mes "When i grow up, I want to be strong enough to kill a scorpion!";
- close;
-
-L_5:
- mes "[Aisha]";
- mes "Items dropped by monsters can be sold.";
- close;
-
-L_6:
- mes "[Aisha]";
- mes "Items such as foods, can be eaten to regain Health Points.";
- close;
-
-L_7:
- mes "[Aisha]";
- mes "I want to be a Doctor when i grow up!";
- close;
-}
-
-new_3-1.gat,120,33,0 script Nina 103,{
- set @TEMP,rand(7);
- if(@TEMP == 1) goto L_1;
- if(@TEMP == 2) goto L_2;
- if(@TEMP == 3) goto L_3;
- if(@TEMP == 4) goto L_4;
- if(@TEMP == 5) goto L_5;
- if(@TEMP == 6) goto L_6;
- if(@TEMP == 7) goto L_7;
- if(@TEMP == 0) goto L_1;
-
-L_1:
- mes "[Nina]";
- mes "If i learned anything from school, Grenxen founded Tulimshar.";
- close;
-
-L_2:
- mes "[Nina]";
- mes "When i was picking rocks from the field, i saw a red scorpion.";
- close;
-
-L_3:
- mes "[Nina]";
- mes "Its polite to state your name before talking to anyone.";
- close;
-
-L_4:
- mes "[Nina]";
- mes "I have a Scorpion Doll!";
- close;
-
-L_5:
- mes "[Nina]";
- mes "I carry spare Cactus Juices while on the field.";
- close;
-
-L_6:
- mes "[Nina]";
- mes "Items such as foods, can be eaten to regain Health Points.";
- close;
-
-L_7:
- mes "[Nina]";
- mes "Grenxen is the Demon that founded Tulimshar.";
- close;
-}
diff --git a/npc/tulimshar/guards.txt b/npc/tulimshar/guards.txt
deleted file mode 100644
index e32ccd40..00000000
--- a/npc/tulimshar/guards.txt
+++ /dev/null
@@ -1,56 +0,0 @@
-new_3-1.gat,48,79,0 script Ekinu 104,{
- mes "[Ekinu the Town Guard]";
- mes "Protecting Tulimshar is my job.";
- next;
- menu
- "Can you give me any tips?",L_Tip,
- "Information",L_Info,;
-
-L_Tip:
- set @TEMP,rand(5);
- if(@TEMP == 0) goto L_0;
- if(@TEMP == 1) goto L_1;
- if(@TEMP == 2) goto L_2;
- if(@TEMP == 3) goto L_3;
- if(@TEMP == 4) goto L_4;
- if(@TEMP == 5) goto L_5;
-L_1:
- mes "[Ekinu the Town Guard]";
- mes "Try to carry spare potion when on fields or in dungeons, they will come in handy.";
- close;
-L_2:
- mes "[Ekinu the Town Guard]";
- mes "Always carry a map of where you are, ask the Guides in most towns to get one.";
- close;
-L_3:
- mes "[Ekinu the Town Guard]";
- mes "When in a dungeon, monsters are more aggressive than if they were outside.";
- close;
-L_4:
- mes "[Ekinu the Town Guard]";
- mes "When gambling for money in casino's, make sure you have enough emergency money.";
- close;
-L_5:
- mes "[Ekinu the Town Guard]";
- mes "Never underestimate the enemy.";
- close;
-L_0:
- mes "[Ekinu the Town Guard]";
- mes "Let me think of a few... Oh! Do NOT attack Red scorpions unless you can kill it for sure!";
- close;
-
-L_Info:
- mes "[Ekinu the Town Guard]";
- mes "Sorry I have no information for you, try asking for a tip.";
- close;
-}
-
-new_3-1.gat,40,79,0 script Ryan 104,{
- mes "[Ryan the Town Guard]";
- mes "ZzzZzzZ...";
- next;
- mes "[Ryan the Town Guard]";
- mes "Heh, what?";
- mes "I wasn't sleeping, I was just resting my eyes!";
-close;
-}
diff --git a/npc/tulimshar/guide.txt b/npc/tulimshar/guide.txt
deleted file mode 100644
index 17775433..00000000
--- a/npc/tulimshar/guide.txt
+++ /dev/null
@@ -1,87 +0,0 @@
-new_3-1.gat,33,30,0 script Ian 102,{
- mes "[Ian the Guide]";
- mes "Would you like to know about something?";
- next;
- menua:
- menu "Fighting",L_Fight,"Items",L_Items,"Monsters",L_Monster,"Stylist",L_Style,"Quests",L_Quests,"NPCs",L_NPC,"Commands",L_Comm,"Quick Keys",L_Key,"I know everything!",L_Know;
-L_Fight:
- mes "[Ian the Guide]";
- mes "People live in this world by living off of monsters";
- mes "You can fight monsters and even players by hitting the [CTRL] key, or left mouse click.";
- next;
- mes "[Ian the Guide]";
- mes "If you get tired of pressing the key too much, you can also type shift+ctrl";
- mes "This will make your character attack continuously for the time you are inactive.";
- next;
- goto menua;
-L_Items:
- mes "[Ian the Guide]";
- mes "There are three types of items.";
- mes "They can be Consumables, Equipment, or Miscellaneous";
- next;
- mes "[Ian the Guide]";
- mes "Consumable items such as Potions, can be used only once";
- mes "after use, they will disappear from your inventory.";
- next;
- mes "[Ian the Guide]";
- mes "Equipment items like Armors, Weapons, Accessories";
- mes "can be equipped for fashionable purposes or to raise your status";
- next;
- mes "[Ian the Guide]";
- mes "Miscellaneous items such as maggot slime, are used";
- mes "in creating other items, or just to trade and sell.";
- next;
- goto menua;
-L_Monster:
- mes "[Ian the Guide]";
- mes "In every world, there are beasts. Monsters can be found almost anywhere!~";
- mes "To fight them, please read [Fighting] if you do not know how";
- next;
- mes "There a several types of monsters, Aggressive, Neutral, Assistants";
- next;
- mes "[Ian the Guide]";
- mes "Aggressive monsters know that they are always in danger";
- mes "so therefore they always keep their guard up";
- mes "Making them attack anybody in sight";
- next;
- mes "[Ian the Guide]";
- mes "Neutral monsters tend to just lounge around until attacked";
- mes "They will leave everything alone unless they are threatened";
- next;
- mes "[Ian the Guide]";
- mes "Assistants are monsters who help each other, there haven't been any yet";
- mes "But there soon will be, These monsters attack in groups if they are threatened";
- next;
- goto menua;
-L_Style:
- mes "[Ian the Guide]";
- mes "The stylist NPC will cut and perm your hair!";
- mes "they are known for their hair growth formula";
- next;
- goto menua;
-L_Quests:
- mes "[Ian the Guide]";
- mes "There are people in the world in need of help!";
- mes "Most of these people aren't afraid to give rewards to those who help them";
- mes "So be nice and help people along the way!";
- next;
- goto menua;
-L_NPC:
- mes "[Ian the Guide]";
- mes "NPCs [Non Playable Characters] are people who are always in the game";
- mes "Tending to many varieties of services from just chatting to helping others.";
- next;
- goto menua;
-L_Comm:
- mes "[Ian the Guide]";
- mes "There are no /Commands available currently";
- next;
- goto menua;
-L_Key:
- mes "[Ian the Guide]";
- mes "There are many key combinations, press F1 for a short list of them!";
- next;
- goto menua;
-L_Know:
- close;
-}
diff --git a/npc/tulimshar/man.txt b/npc/tulimshar/man.txt
deleted file mode 100644
index 3d0f0d66..00000000
--- a/npc/tulimshar/man.txt
+++ /dev/null
@@ -1,18 +0,0 @@
-new_3-1.gat,114,43,0 script Luca 102,{
- mes "[Luca the Hunter]";
- mes "Ouch! It hurts, this wound I got from battle.";
- next;
- menu "Tell me about it",L_Exp,"Nevermind",L_Nev;
-
-L_Exp:
- mes "I was fighting scorpions for experience and I bumped into a RED one. I had NEVER seen it before!";
- next;
- mes "Luckily i had a camera with me! Here's a picture of it... Let me find it, I put it in my pocket somewhere...";
- next;
- mes "Oh man! My pockets have been ripped clean off!";
- close;
-
-L_Nev:
- mes "Hmpf!";
- close;
-}
diff --git a/npc/tulimshar/merchant.txt b/npc/tulimshar/merchant.txt
deleted file mode 100644
index 75070c7d..00000000
--- a/npc/tulimshar/merchant.txt
+++ /dev/null
@@ -1 +0,0 @@
-new_3-1.gat,54,45,0 shop Neko 101,501:50,502:60,1201:100,1202:1000,522:300,521:1000,523:8000
diff --git a/npc/tulimshar/monsters.txt b/npc/tulimshar/monsters.txt
deleted file mode 100644
index 645c5627..00000000
--- a/npc/tulimshar/monsters.txt
+++ /dev/null
@@ -1,32 +0,0 @@
-// Map: new_3-1
-// This is Tulimshar the city - southern Part with market and casino/inn.
-// ALWAYS keep a backup file before edit (experience :)
-// The last param is the Event on Mobdeath
-//
-
-new_3-1.gat,0,0,0,0 monster Maggot 1002,35,2000,0,ConquestMob3::OnMaggotDead
-new_3-1.gat,0,0,0,0 monster Scorpion 1003,25,2500,0,ConquestMob3::OnScorpionDead
-new_3-1.gat,0,0,0,0 monster Firegoblin 1011,20,2500,0,ConquestMob3::OnFireGoblinnDead
-
-new_3-1.gat,0,0,0 script ConquestMob3 -1,{
-// id 1002 = Maggot
-OnMaggotDead:
- if (MPQUEST == 1) set Mobpt,Mobpt+1;
- break;
-
-// id 1003 = Scorpion
-OnScorpionDead:
- if (MPQUEST == 1) set Mobpt,Mobpt+2;
- break;
-end;
-}
-
-// id 1011 = FireGoblin
-OnFireGoblinDead:
- if (MPQUEST == 1) set Mobpt,Mobpt+2;
- break;
-end;
-}
-
-
-
diff --git a/npc/tulimshar/passages.txt b/npc/tulimshar/passages.txt
deleted file mode 100644
index afecf42e..00000000
--- a/npc/tulimshar/passages.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-new_1-1.gat,56,12 warp totown 5,1,new_3-1.gat,44,80
-new_3-1.gat,42,88 warp tofield 5,2,new_1-1.gat,58,17
diff --git a/npc/tulimshar/rewards_master.txt b/npc/tulimshar/rewards_master.txt
deleted file mode 100644
index bc9134ff..00000000
--- a/npc/tulimshar/rewards_master.txt
+++ /dev/null
@@ -1,181 +0,0 @@
-new_3-1.gat,55,51,0 script Ishi 106,{
- if (MPQUEST == 0) goto Register;
- if (tvis == 0) set tvis,1;
- if (Mobpt < tvis) goto NotEnough;
-
- mes "[Ishi the Rewards Master]";
- mes "Welcome! I see you have " +Mobpt+ " Monster Points. Would you like to exchange some of those for an item?";
- next;
- menu "Yes",Y1,"No Thanks",LEAVE;
- next;
-
-Register:
- mes "[Ishi the Rewards Master]";
- mes "Hey, it seems like you didn't register as a quest participant yet! You can sign up at the gate below.";
- close;
-
-Y1:
- set Mobpt,Mobpt-tvis;
- set tvis,tvis+1;
- set @TEMP,rand(1);
- if(@TEMP ==0) goto R_1;
- if(@TEMP ==1) goto R_2;
-R_1:
- set @TEMP,rand(19);
- if(@TEMP ==0) goto R1_1;
- if(@TEMP ==1) goto R1_2;
- if(@TEMP ==2) goto R1_3;
- if(@TEMP ==3) goto R1_4;
- if(@TEMP ==4) goto R1_5;
- if(@TEMP ==5) goto R1_6;
- if(@TEMP ==6) goto R1_7;
- if(@TEMP ==7) goto R1_8;
- if(@TEMP ==8) goto R1_9;
- if(@TEMP ==9) goto R1_10;
- if(@TEMP ==10) goto R1_11;
- if(@TEMP ==11) goto R1_12;
- if(@TEMP ==12) goto R1_13;
- if(@TEMP ==13) goto R1_14;
- if(@TEMP ==14) goto R1_15;
- if(@TEMP ==15) goto R1_16;
- if(@TEMP ==16) goto R1_17;
- if(@TEMP ==17) goto R1_18;
- if(@TEMP ==18) goto R1_19;
- if(@TEMP ==19) goto R1_20;
-
-R1_1:
- mes "[Ishi the Rewards Master]";
- mes "You got a cactus drink!";
- getitem 501,1;
- goto Q;
-R1_2:
- mes "[Ishi the Rewards Master]";
- mes "You got a cactus potion!";
- getitem 502,1;
- goto Q;
-R1_3:
- mes "[Ishi the Rewards Master]";
- mes "You got casino coins!";
- getitem 503,1;
- goto Q;
-R1_4:
- mes "[Ishi the Rewards Master]";
- mes "You got a decor candy cane!";
- getitem 504,1;
- goto Q;
-R1_5:
- mes "[Ishi the Rewards Master]";
- mes "You got a maggot slime!";
- getitem 505,1;
- goto Q;
-R1_6:
- mes "[Ishi the Rewards Master]";
- mes "You got a candy cane!";
- getitem 506,1;
- goto Q;
-R1_7:
- mes "[Ishi the Rewards Master]";
- mes "You got a scorpion stinger!";
- getitem 507,1;
- goto Q;
-R1_8:
- mes "[Ishi the Rewards Master]";
- mes "You got an Xmas cake!";
- getitem 508,1;
- goto Q;
-R1_9:
- mes "[Ishi the Rewards Master]";
- mes "You got a chocolate bar!";
- getitem 509,1;
- goto Q;
-R1_10:
- mes "[Ishi the Rewards Master]";
- mes "You got a candy!";
- getitem 510,1;
- goto Q;
-R1_11:
- mes "[Ishi the Rewards Master]";
- mes "You got cotton shorts!";
- getitem 586,1;
- goto Q;
-R1_12:
- mes "[Ishi the Rewards Master]";
- mes "You got a ginger bread man!";
- getitem 512,1;
- goto Q;
-R1_13:
- mes "[Ishi the Rewards Master]";
- mes "You got a cake!";
- getitem 513,1;
- goto Q;
-R1_14:
- mes "[Ishi the Rewards Master]";
- mes "You got a candy cane!";
- getitem 514,1;
- goto Q;
-R1_15:
- mes "[Ishi the Rewards Master]";
- mes "You got a purple present!";
- getitem 515,1;
- goto Q;
-R1_16:
- mes "[Ishi the Rewards Master]";
- mes "You got a blue present!";
- getitem 516,1;
- goto Q;
-R1_17:
- mes "[Ishi the Rewards Master]";
- mes "You got a red scorpion stinger!";
- getitem 517,1;
- goto Q;
-R1_18:
- mes "[Ishi the Rewards Master]";
- mes "You got a bug leg!";
- getitem 518,1;
- goto Q;
-R1_19:
- mes "[Ishi the Rewards Master]";
- mes "You got a cherry cake!";
- getitem 519,1;
- goto Q;
-R1_20:
- mes "[Ishi the Rewards Master]";
- mes "You got an easter egg!";
- getitem 520,1;
- goto Q;
-
-R_2:
- set @TEMP,rand(3);
- if(@TEMP ==0) goto R2_1;
- if(@TEMP ==1) goto R2_2;
- if(@TEMP ==2) goto R2_3;
- if(@TEMP ==3) goto R2_4;
-
-R2_1:
- mes "[Ishi the Rewards Master]";
- mes "You got an arrow!";
- getitem 1199,1;
- goto Q;
-R2_2:
- mes "[Ishi the Rewards Master]";
- mes "You got a bow!";
- getitem 1200,1;
- goto Q;
-R2_3:
- mes "[Ishi the Rewards Master]";
- mes "You got a knife!";
- getitem 1201,1;
- goto Q;
-R2_4:
- mes "[Ishi the Rewards Master]";
- mes "You got a cotton shirt!";
- getitem 1202,1;
- goto Q;
-
-NotEnough:
- mes "[Ishi the Rewards Master]";
- mes "You don't have enough Monster Points for a reward. Kill some more monsters first.";
- close;
-LEAVE:
- close;
-}
diff --git a/npc/tulimshar/sandra.txt b/npc/tulimshar/sandra.txt
deleted file mode 100644
index 6a19ffa7..00000000
--- a/npc/tulimshar/sandra.txt
+++ /dev/null
@@ -1,81 +0,0 @@
-new_3-1.gat,72,61,0 script Sandra 114,{
- if(Scorp == 2) goto done;
- if(Scorp == 1) goto reas;
- set @TEMP,rand(3);
- if(@TEMP == 1) goto L_1;
- if(@TEMP == 2) goto L_2;
- if(@TEMP == 3) goto L_3;
- if(@TEMP == 0) goto L_4;
-L_1:
- mes "[Sandra]";
- mes "In the outskirts of Tulimshar, there wanders a red scorpion. I need a favor, please help me.";
- next;
- goto red;
-L_2:
- mes "[Sandra]";
- mes "When you venture in the outskirts of Tulimshar, you can spot a red scorpion. Will you help me kill one?";
- next;
- goto red;
-L_3:
- mes "[Sandra]";
- mes "The red scorpion stinger carries many properties used in potions.";
- next;
- goto red;
-L_4:
- mes "[Sandra]";
- mes "You look sturdy enough, will you help me get something?";
- next;
- goto red;
-red:
- menu "Yes",L_kl,"No",L_N;
-L_kl:
- if(@TEMP == 1) goto K_1;
- if(@TEMP == 2) goto K_2;
- if(@TEMP == 3) goto K_3;
- if(@TEMP == 0) goto K_1;
-K_1:
- mes "[Sandra]";
- mes "I need you to slaughter the red scorpion found outside of Tulimshar and bring me 5 [Red Stingers]";
- next;
- goto set1;
-K_2:
- mes "[Sandra]";
- mes "I heard a while ago that the stinger of a red scorpion can be used for medical purposes. I need you to help me get 5 [Red Stingers]";
- next;
- goto set1;
-K_3:
- mes "[Sandra]";
- mes "Bring me 5 [Red Stingers] and i will reward you greatly";
- next;
- goto set1;
-set1:
- set Scorp,1;
- mes "[Sandra]";
- mes "Please bring me them!";
- close;
-reas:
- if(countitem(517) >= 5) goto have;
- mes "[Sandra]";
- mes "Please hurry and bring me 5 [Red Stingers]";
- close;
-have:
- mes "[Sandra]";
- mes "Excelent!";
- mes "You brought me 5 [Red Stingers]!";
- delitem 517,5;
- next;
- mes "[Sandra]";
- mes "Here you go, your reward!";
- mes "+Got Bow";
- mes "+Got Arrows 100";
- getitem 1200,1;
- getitem 1199,100;
- set Scorp,2;
- close;
-done:
- mes "[Sandra]";
- mes "Thank you for all your help!";
- close;
-L_N:
- close;
-}
diff --git a/npc/tulimshar/vincent.txt b/npc/tulimshar/vincent.txt
deleted file mode 100644
index c485db32..00000000
--- a/npc/tulimshar/vincent.txt
+++ /dev/null
@@ -1,90 +0,0 @@
-new_3-1.gat,137,34,0 script Vincent 113,{
- if(Bugleg == 1) goto reas;
- if(Bugleg == 2) goto done;
- set @TEMP,rand(3);
- if(@TEMP == 1) goto L_1;
- if(@TEMP == 2) goto L_2;
- if(@TEMP == 3) goto L_3;
- if(@TEMP == 0) goto L_4;
-
-L_1:
- mes "[Vincent]";
- mes "I just need 30 more [Bug Legs] to finish my action figure!";
- next;
- goto main1;
-L_2:
- mes "[Vincent]";
- mes "This maggot action figure is awesome! I just need to attach [30 Part A{Bug Leg}]";
- next;
- goto main1;
-L_3:
- mes "[Vincent]";
- mes "This is a great action figure! A must have! All i need is a few parts...";
- goto main1;
-L_4:
- mes "[Vincent]";
- mes "Can you get me 30 [Bug Legs]? I need them to replace the action figure parts.";
- next;
- goto main1;
-
-main1:
- mes "[Vincent]";
- mes "Will you help me find 30 [Bug Legs]?";
- next;
- menu "Yes",B_1,"No",B_2;
-B_1:
- set Bugleg,1;
- set @TEMP,rand(3);
- if(@TEMP == 1) goto J_1;
- if(@TEMP == 2) goto J_2;
- if(@TEMP == 3) goto J_3;
- if(@TEMP == 0) goto J_4;
-J_1:
- mes "[Vincent]";
- mes "Thank you!";
- next;
- goto main2;
-J_2:
- mes "[Vincent]";
- mes "I don't know how to thank you enough!";
- next;
- goto main2;
-J_3:
- mes "[Vincent]";
- mes "I will thank you when I get them!";
- next;
- goto main2;
-J_4:
- mes "[Vincent]";
- mes "I'm sure I will give a small reward. :D";
- next;
- goto main2;
-main2:
- mes "[Vincent]";
- mes "Now please go get me 30 [Bug Legs]";
- close;
-reas:
- if(countitem(518) >= 30) goto have;
- mes "[Vincent]";
- mes "Please help me collect 30 [Bug Legs]!";
- close;
-have:
- mes "[Vincent]";
- mes "Excellent! Finally I can complete the model!!";
- delitem 518,30;
- next;
- mes "[Vincent]";
- mes "Here you go, a little of my appreciation!";
- next;
- mes "Got 1000 GP";
- set zeny,zeny+1000;
- set Bugleg,2;
- close;
-done:
- mes "[Vincent]";
- mes "Thanks for your help!";
- close;
-B_2:
- close;
-}
-
diff --git a/npc/western-desert/dark_mage.txt b/npc/western-desert/dark_mage.txt
deleted file mode 100644
index 06d9b35b..00000000
--- a/npc/western-desert/dark_mage.txt
+++ /dev/null
@@ -1,37 +0,0 @@
-new_1-1.gat,24,24,0 script SoulThief 103,{
-
- if (class == 1) goto L_Soul;
- mes "[Dark Mage]";
- mes "Psss hey would you like to have more power?";
- next;
-
- menu "You fool, that's not possible",-,"I'm listening...",L_Go;
- close;
-
-L_Go:
- mes "I can give you ancient powers that will let you become the greatest warrior in The Mana World, or the best merchant.";
- mes "But everything has got his price...";
- next;
-
- mes "Oh nothing important nor expensive.";
- mes "Just your soul!";
- next;
-
- menu "My soul? Here it is",L_Soul,"I need a better explanation!",-;
-
- mes "Well there's a very small possibility that your player will be translated into the new server.";
- mes "I said a very, very small possibility.";
- mes "Players without a soul instead will be lost forever...";
- mes "Come on, you won't loose that much!";
- next;
-
- menu "Hmmm ok, I guess you can take it.",L_Soul,"Maybe I'll think about it a bit more",-;
- mes "I know you'll come here again when you'll get killed by a maggot, begging me to help you";
- close;
-
-L_Soul:
- mes "[Dark Mage]";
- mes "Hrhrhr, your soul is finally mine!";
- jobchange 1;
- close;
-} \ No newline at end of file
diff --git a/npc/western-desert/monsters.txt b/npc/western-desert/monsters.txt
deleted file mode 100644
index adb609e5..00000000
--- a/npc/western-desert/monsters.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-new_1-1.gat,0,0,0,0 monster GreenSlime 1005,50,0,0,0
-new_1-1.gat,0,0,0,0 monster GiantMaggot 1006,30,0,0,0
-new_1-1.gat,0,0,0,0 monster RedScorpion 1004,20,0,0,0
diff --git a/npc/western-desert/passages.txt b/npc/western-desert/passages.txt
deleted file mode 100644
index a4d7c3af..00000000
--- a/npc/western-desert/passages.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-new_2-1.gat,36,30 warp caveexit 3,0,new_1-1.gat,25,95
-new_1-1.gat,19,94 warp caveentrance 1,1,new_2-1.gat,37,31
-new_1-1.gat,111,79 warp eastdesert 2,2,new_7-1.gat,23,40
-new_7-1.gat,18,39 warp westdesert 3,4,new_1-1.gat,106,78
-new_1-1.gat,11,66 warp woodland 1,2,new_15-1.gat,164,66
diff --git a/npc/woodland-desert/monsters.txt b/npc/woodland-desert/monsters.txt
deleted file mode 100644
index 99424ddf..00000000
--- a/npc/woodland-desert/monsters.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-new_15-1.gat,0,0,0,0 monster Scorpion 1009,20,0,0,0
-new_15-1.gat,0,0,0,0 monster Snake 1010,10,0,0,0
diff --git a/npc/woodland-desert/passages.txt b/npc/woodland-desert/passages.txt
deleted file mode 100644
index eee992ce..00000000
--- a/npc/woodland-desert/passages.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-new_15-1.gat,170,66 warp todesert 3,3,new_1-1.gat,15,66
-new_15-1.gat,20,13 warp towoodland 3,0,new_16-1.gat,120,112
diff --git a/npc/woodland-village/forestbowquest.txt b/npc/woodland-village/forestbowquest.txt
deleted file mode 100644
index ba426f8c..00000000
--- a/npc/woodland-village/forestbowquest.txt
+++ /dev/null
@@ -1,191 +0,0 @@
-//#################################################################################
-//# #
-//# This script file contains the npc scripts for the quest to obtain a forestbow #
-//# #
-//# Needed: 10 Raw Logs, 5000gp, some chatting and running. #
-//# #
-//# Reward: Forest Bow #
-//#################################################################################
-
-// Archer Shop Master
-new_20-1.gat,99,23,0 script Master 125, {
- if (QUEST_Forestbow_state == 1) goto L_State_1;
- if (QUEST_Forestbow_state == 2) goto L_State_2;
- if (QUEST_Forestbow_state == 3) goto L_State_3;
- if (QUEST_Forestbow_state == 4) goto L_State_4;
- if (QUEST_Forestbow_state == 5) goto L_State_5;
-
- mes "[Bowyer Master]";
- mes "When you want to buy something then please speak to my apprentice. I am only doing special requests.";
- next;
- menu "OK, thanks",-,"Can you make me a really good bow?", L_State_0_1;
- close;
-
- L_State_0_1:
- mes "[Bowyer Master]";
- mes "You mean like one of my legendary forest bows?";
- next;
- menu "Yes, that would be nice.",-;
- mes "Sorry, I am not making these anymore.";
- next;
- menu "Oh, too bad.",-,"What? Why that?", L_State_0_2;
- close;
- L_State_0_2:
- mes "[Bowyer Master]";
- mes "The problem is that I am short of material. My forestbows are not made of regular wood, you know.";
- mes "They are made of special living wood. And only the best logs of living wood are good enough for them.";
- mes "I used to get these logs from Jack, the lumberjack. But the last time I asked him for a new delivery he said that he would never again get any for me.";
- set QUEST_Forestbow_state, 1;
- next;
- menu "Too bad.",-,"Did you ask him why?", L_State_0_3;
- close;
- L_State_0_3:
- mes "[Bowyer Master]";
- mes "Sure I did. But he just told me to leave him alone. Maybe you could ask him what's wrong?";
- next;
- menu "OK, I'll ask him.",-,"I am sure he got his reasons.",-;
- close;
-
-
- L_State_1:
- mes "[Bowyer Master]";
- mes "Did you already ask Jack why he won't deliver me any more living wood?";
- next;
- menu "No, I haven't had the time yet",-,"No, I didn't find him yet.",L_State_1_1;
- close;
- L_State_1_1:
- mes "[Bowyer Master]";
- mes "When you leave my shop just go southwest over the village plaza. You can't miss it.";
- close;
-
- L_State_2:
- mes "[Bowyer Master]";
- mes "Did you already ask Jack why he won't deliver me any more living wood?";
- next;
- menu "Yes, I did. He said that the trees turned into dangerous monsters.",-;
- mes "[Bowyer Master]";
- mes "Oh, that's really bad news. Maybe you can do his job?";
- mes "When you kill some of these tree monsters and bring me their wood I can take a look at them.";
- mes "Maybe you will find a piece of wood that is strong enough to become one of my forest bows.";
- set QUEST_Forestbow_state, 3;
- close;
-
- L_State_3:
- mes "[Bowyer Master]";
- mes "How is the hunt going? Did you bring me any wood?";
- if (countitem(569) < 1) close;
- next;
- menu "Here, take a look!",L_State_3_try, "Yes, but I need it for something else.",-;
- close;
- L_State_3_try:
- mes "[Bowyer Master]";
- mes "Hmmm... looks ok, but is it strong enough?";
- mes "*bends the log over his knee*";
- next;
- delitem 569, 1;
- set @Temp1,rand(20);
- if (@Temp1 == 0) goto L_State_3_success;
- mes "(The log breaks with a loud crack)";
- next;
- mes "[Bowyer Master]";
- mes "Sorry, this log was too weak for one of my forest bows. Now it is junk. Give me another.";
- if (countitem(569) < 1) close;
- next;
- menu "Sure, here you go.",L_State_3_try, "Hey! Stop breaking my stuff!",-;
- close;
-
- L_State_3_success:
- mes "(The bowyer master tries as hard as he can but the log won't bend.)";
- next;
- mes "[Bowyer Master]";
- mes "Aaah! Yes! That is a really fine piece of wood you bought me. It will make an excelent bow!";
- next;
- set QUEST_Forestbow_state, 4;
-
- L_State_4:
- mes "I can make you a really nice forest bow out of this. I just need 10.000 gp for material and work time.";
- next;
- menu "10.000??? What a ripoff!",-,"Sure, here you go!", L_State_4_pay;
- close;
- L_State_4_pay:
- if (zeny < 10000) goto L_State_4_nocash;
- set zeny, zeny-10000;
- getitem 545, 1;
- set QUEST_Forestbow_state, 5;
- mes "Here you go - have fun with it.";
- close;
- L_State_4_nocash:
- mes "Seems like you are out of cash.";
- close;
- L_State_5:
- mes "I hope you are statisfied with your forest bow. It is one of my best works.";
-
-}
-
-
-// Lumberjack
-new_19-1.gat,40,45,0 script Jack 141, {
-
- if (QUEST_Forestbow_state > 1) goto L_State_2;
-
- mes "[Jack Lumber]";
- mes "Hello there, my name is Jack Lumber, the enemy of all trees. When you need some firewood just let me know.";
- if (QUEST_Forestbow_state < 1) close;
-
- next;
- menu "I heard you aren't delivering any more living wood. Why that?",-;
-
- mes "[Jack Lumber]";
- mes "Why not?! I value my life, that's why!.";
-
- next;
- menu "What do you mean?",-;
-
- mes "[Jack Lumber]";
- mes "A week ago I was going to chop down one of those twigleaf trees in the forest to the southwest. These twigleafs are the trees that give me the living wood you speak of. I was just chopping away with my axe and what happened? One of its branches hit me! I thought it fell down or the wind blew it. It hurt! I shook it off and struck it again with my axe and another branch hit me! I got angry and started to chop off all the branches near the ground so this couldn't happen anymore. But I still can't believe what happened next.";
-
- next;
- menu "What happened? ",-;
-
- mes "[Jack Lumber]";
- mes "You'll think I am insane when I tell you.";
-
- next;
- menu "I won't. I promise.",-;
-
- mes "[Jack Lumber]";
- mes "OK. After I chopped off a few branches the whole tree started to move. Its roots tore out of the earth, all the branches started to wave around and a face appeared on the trunk. The whole tree CAME TO LIFE! It was mad!";
- next;
- menu "Did you run away?",-,"Did you fight it?",-;
-
- mes "[Jack Lumber]";
- mes "I fought, of course! I took my axe and attacked the beast! It hit me here *points at a bruise at his shoulder*, here *lifts his trouser leg to show another bruise* and here *lifts his shirt and reveals some even worse bruises*. But i didn't give up. I chopped away at it, branch after branch, and in the end I chopped off its roots and it fell to the ground motionless. ";
-
- next;
- menu "So you beat the monster? Then why are you so scared?";
-
- mes "[Jack Lumber]";
- mes "Well, I was exhausted and had to rest. A few minutes passed and suddenly I was surrounded by a dozen or more of these living trees!";
-
- next;
- menu "Did you fight them, too? ",-;
-
- mes "[Jack Lumber]";
- mes "Are you crazy? I barely destroyed one of those beasts. I was in no shape to fight again. I ran away as fast as i could. Lucky for me the monsters aren't that fast on their tiny root legs. Ha! ";
-
- next;
- menu "So you aren't chopping down trees anymore? ",-;
-
- mes "[Jack Lumber]";
- mes "I still do. It's my job. But I no longer chop those twigleafs, I'll tell you that. I know the bowyer master wants some wood from them, but I don't care. I won't risk my life for a few gold pieces. If you want to, just go to the southwest. But i won't go there ever again.";
-
- next;
- menu "Southwest you say? OK, thank you.",-;
-
- set QUEST_Forestbow_state, 2;
- close;
-
- L_State_2:
- mes "Good luck hunting those tree monsters - you will need it.";
- close;
-}
diff --git a/npc/woodland-village/ironore.txt b/npc/woodland-village/ironore.txt
deleted file mode 100644
index 1e0ffd94..00000000
--- a/npc/woodland-village/ironore.txt
+++ /dev/null
@@ -1,97 +0,0 @@
-new_20-1.gat,185,55,0 script Nicholas 135,{
-mes "[Nicholas]";
-mes "Hello there,";
-mes "I'm an expert blacksmith.";
-mes "If you get me some Iron Ore";
-mes "I could make you a very valuable helmet.";
-next;
-L_M:
-menu "I have some Iron Ore!",L_Check,"Where can I get this Iron Ore?",L_Info,"I'm okay, thanks.",L_Pass;
- L_Check:
- mes "[Nicholas]";
- mes "Let me take at look at how much you have...";
- next;
- if(countitem(640)<5) goto NoItem;
- if(countitem(640)<10) goto StageA;
- if(countitem(640)<15) goto StageB;
- goto StageC;
- L_Info:
- mes "[Nicholas]";
- mes "You can find Iron Ore in mines.";
- mes "It is quite hard to come by though.";
- close;
- L_Pass:
- mes "[Nicholas]";
- mes "Oh, okay";
- mes "Come back any time.";
- close;
- StageA:
- mes "[Nicholas]";
- mes "That's just enough for me to make you";
- mes "a winged Knight's Helmet.";
- mes "But it'll cost you 10,000GP";
- mes "and 5 lumps of Iron Ore.";
- next;
- menu "Deal!",L_YesKnight,"I'll pass, thanks.",ComeBack;
- StageB:
- mes "[Nicholas]";
- mes "Ahh, with that much Iron Ore I can";
- mes "make you one of two helmets,";
- mes "for only 10,000GP.";
- mes "";
- mes "Which one do you want?";
- next;
- menu "Crusade Helmet. (10 Iron Ore's)",L_YesCrusade,"Knight's Helmet. (5 Iron Ore's)",L_YesKnight,"I'll pass, thanks.",ComeBack;
- StageC:
- mes "[Nicholas]";
- mes "Excellent, that's enough to make";
- mes "three different types of helmet.";
- mes "My fee is 10,000GP.";
- mes "";
- mes "Which helmet do you want?";
- next;
- menu "Warlord Helmet. (15 Iron Ore's)",L_YesWarlord,"Crusade Helmet. (10 Iron Ore's)",L_YesCrusade,"Knight's Helmet. (5 Iron Ore's)",L_YesKnight,"I'll pass, thanks.",ComeBack;
- NoItem:
- mes "[Nicholas]";
- mes "It appears you don't have enough Iron Ore for me to work with.";
- mes "Please do come back when you have more though.";
- close;
- ComeBack:
- mes "[Nicholas]";
- mes "Come back any time.";
- close;
- NoMoney:
- mes "[Nicholas]";
- mes "Oh dear, it seems you don't have enough money.";
- close;
- L_YesKnight:
- if (zeny < 10000) goto NoMoney;
- set zeny, zeny-10000;
- delitem 640,5;
- getitem 637,1;
- mes "[Nicholas]";
- mes "There you go!";
- mes "";
- mes "Come back any time.";
- close;
- L_YesCrusade:
- if (zeny < 10000) goto NoMoney;
- set zeny, zeny-10000;
- delitem 640,10;
- getitem 639,1;
- mes "[Nicholas]";
- mes "Hope you like it!";
- mes "";
- mes "Come back any time.";
- close;
- L_YesWarlord:
- if (zeny < 10000) goto NoMoney;
- set zeny, zeny-10000;
- delitem 640,15;
- getitem 636,1;
- mes "[Nicholas]";
- mes "Here you go!";
- mes "";
- mes "Come back any time.";
- close;
-} \ No newline at end of file
diff --git a/npc/woodland-village/monsters.txt b/npc/woodland-village/monsters.txt
deleted file mode 100644
index cc2fac69..00000000
--- a/npc/woodland-village/monsters.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-new_18-1.gat,0,0,0,0 monster Violet 1018,20,0,0,0
-new_18-1.gat,0,0,0,0 monster Shroom 1019,20,0,0,0 \ No newline at end of file
diff --git a/npc/woodland-village/pirate.txt b/npc/woodland-village/pirate.txt
deleted file mode 100644
index d575f88b..00000000
--- a/npc/woodland-village/pirate.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-new_18-1.gat,136,36,0 script Jack 138,{
- mes "[Jack the Pirate]";
- mes "Arrrrh! Tis some kind of treasure map!";
- close;
-}
diff --git a/npc/woodland-village/scythequest.txt b/npc/woodland-village/scythequest.txt
deleted file mode 100644
index 92881c92..00000000
--- a/npc/woodland-village/scythequest.txt
+++ /dev/null
@@ -1,64 +0,0 @@
-//#################################################################################
-//# #
-//# this script file contains the npc scripts for the quest to obtain a scythe. #
-//# #
-//# Needed: 10 Pink Antenna #
-//# #
-//# Reward: Scythe #
-//# #
-//#################################################################################
-
-//Farmer
-
-new_18-1.gat,101,30,0 script Farmer 142, {
- if (QUEST_Scythe_state == 1) goto L_Exchange;
- if (QUEST_Scythe_state == 2) goto L_ThanksAgain;
- mes "[Farmer Hinnak]";
- mes "Argh! I hate them! I @#$% hate them! I @#$% hate these @#$% pinkies!";
- next;
-
- menu "You need some anger control therapy.",-,"Why do you hate them?", L_Reason;
- close;
- L_Reason:
- mes "These @#$% beasts are jumping around in my fields destroying all my harvest.";
- mes "But they are too fast. I can't catch them.";
- next;
-
- menu "Want me to help you?",L_Help,"Well, life ain't fair.",-;
- close;
- L_Help:
- mes "Yes, you look quite fast. Maybe you can catch some of them. That will pay them a lesson.";
- mes "Slay some of them and bring me 10 of their antennae.";
- set QUEST_Scythe_state, 1;
- next;
-
- menu "Sure, I'm on my way",-,"How much is this worth to you?", L_Reward;
- close;
- L_Reward:
- mes "Well, I can't offer you much. But I got an old scythe laying around. Maybe you can use it as a weapon.";
- close;
-
- L_Exchange:
- mes "Have you got the 10 antennae?";
- next;
-
- if (countitem(614) < 10) goto L_Exchange_Notenough;
-
- menu "Not yet, but I am working on it.",-,"Sure, here they are!",L_Exchange_Exchange;
- close;
-
- L_Exchange_Exchange:
- delitem 614,10;
- getitem 623,1;
- set QUEST_Scythe_state, 2;
- mes "Thank you very much. I've got something for you. My old scythe. Maybe you can use it as a weapon. It is a bit cumbersome but its strikes are deadly.";
- close;
-
- L_Exchange_Notenough:
- menu "Not yet, but I am working on it.",-;
- close;
-
- L_ThanksAgain:
- mes "Thanks again for helping me with the pinkies.";
- close;
-} \ No newline at end of file
diff --git a/npc/woodland-village/shops.txt b/npc/woodland-village/shops.txt
deleted file mode 100644
index a3b8117c..00000000
--- a/npc/woodland-village/shops.txt
+++ /dev/null
@@ -1,76 +0,0 @@
-//#################################################################################
-//# #
-//# This script file contains all shops and other NPCs with important functions. #
-//# #
-//#################################################################################
-//Bartender
-// sells beer and cake
-new_20-1.gat,65,49,0 shop Barkeeper 112,539:175,513:20,519
-
-//Receptionist
-// Offers the player to rest at the inn for 100gp
-new_20-1.gat,50,48,0 script Receptionist 108,{
- if (zeny < 100) goto L_NoMoney;
- mes "[Receptionist]";
- mes "Would you like to rest? It's only 100 gp.";
- next;
-
- menu "Yes",-,"No",L_No;
- mes "Sleep well!";
- next;
-
- set zeny,zeny-100;
- heal 10000,10000;
- close;
-
- L_No:
- mes "See you.";
- close;
-
- L_NoMoney:
- mes "Would you like to rest? Come back if you have at least 100 gp.";
- close;
-}
-
-//Archer Shop
-// sells bow, short bow, arrows and iron arrows
-new_20-1.gat,97,24,0 shop Apprentice 120,1199:3,529:5,1200:1000,530:3000
-
-//Potion Shop
-// sells cactus drink, cactus potion, iron potion and concentration potion
-new_20-1.gat,121,26,0 shop Witch 103,501:50,502:70,567:500,568:500
-
-//Nurse
-// heals player below level 10 for free and tells players about the doctor on the 2nd floor.
-new_20-1.gat,147,65,0 script Nurse 119,{
-
- mes "[Nurse]";
- mes "Can I help you?";
- next;
-
- menu "Oooh, these wounds! They hurts so much!",L_Heal,"I don't feel so well, I might be sick.",L_Doctor,"No, I'm fine.",-;
- mes "Then I would ask you to leave. There are people who really need our help.";
- close;
-
- L_Doctor:
- mes "Then you should better see the doctor. He is usually in his office on the 2nd floor.";
- close;
-
- L_Heal:
- if (baselevel > 10) goto L_NoHeal;
- mes "Here, let me heal you.";
- next;
- heal 10000,10000;
- close;
-
- L_NoHeal:
- mes "I'm sorry but I'm here only to help young people.";
- mes "Your level is already higher than 10.";
- mes "You can get some rest in the inn near here.";
- close;
-}
-
-
-//Blacksmith
-// Sells all knives, chainmail armor, light platemail
-new_20-1.gat,183,57,0 shop Blacksmith 135,625:20000,626:50000,1201:25,522:100,521:1000; \ No newline at end of file
diff --git a/npc/woodland-village/villagers.txt b/npc/woodland-village/villagers.txt
deleted file mode 100644
index 044877a9..00000000
--- a/npc/woodland-village/villagers.txt
+++ /dev/null
@@ -1,89 +0,0 @@
-//#################################################################################
-//# #
-//# This script file contains NPCs with less vital functions that are mainly for #
-//# ambient purpose. #
-//# #
-//#################################################################################
-// Girl sitting on bench
-new_19-1.gat,89,27,0 script Sabine 106,{
- mes "[Sabine]";
- mes "Isn't this place pretty? I love hanging out here!";
- close;
-}
-
-// Waitress
-new_20-1.gat,60,52,0 script Melinda 140,{
- if (zeny < 180) goto L_NoMoney;
- mes "[Melinda]";
- mes "Hi sweety! Want a fresh beer for 170gp?";
- next;
-
- menu "Sure! [don't tip]",-,"Sure! [tip 5gp]",L_5Tip,"Sure! [tip 10gp]",L_10Tip,"Nah, maybe later.",L_No;
- mes "Pff... nickel nurser!";
- next;
- set zeny,zeny-170;
- getitem 539,1;
- close;
-
- L_5Tip:
- mes "Here you go, sweethearth!";
- next;
- set zeny,zeny-175;
- getitem 539,1;
- close;
-
- L_10Tip:
- mes "Thank you, sweety! Want me to tell you something?";
- next;
- set zeny,zeny-180;
- getitem 539,1;
- menu "What's it, darling?",-,"Nah, I don't feel like chatting.",L_No;
- mes "The bowmaking master in this village used to construct exceptional bows. When you want one you should go and ask him.";
- close;
- L_No:
- mes "Just call me when you've changed your mind.";
- close;
-
- L_NoMoney:
- mes "You look broke. Don't think that you can dine and dash here!";
- close;
-}
-
-// Doctor
-new_20-1.gat,148,25,0 script Doctor 107,{
- mes "[Doctor]";
- mes "Hello, can I help you?";
- next;
- menu "I think I am sick!",L_Cure,"No, I feel fine.",-;
- mes "Then please stop wasting my precious time.";
- close;
- L_Cure:
- mes "That is impossible. Status ailments aren't ingame yet!";
- close;
-}
-
-//Note in bar
-new_20-1.gat,54,49,0 script Note 127, {
- mes "[Note]";
- mes "We refuse service to anyone who:";
- mes "-Has a bubblehead";
- mes "-Is not properly shaded";
- mes "-Can't walk without stopping after every step";
- close;
- // In case you don't get the joke - it's a parody on Illutia.
-}
-
-//Left drinking contest guy
-new_20-1.gat,65,55,0 script Drinker 121, {
- mes "[Binge Drinker]";
- mes "Ha! I'll drink muuuch mo.. more than you! Im not ooone biiit dr...dr..unk!";
- close;
-}
-
-//Right drinking contest guy
-new_20-1.gat,68,55,0 script Drinker 121, {
- mes "[Binge Drinker]";
- mes "I can still drink more! Better give up you... you... teelotaler! MORE BEER MELINDA!";
- //I know it's called "teetotaler". That error is on purpose.
- close;
-} \ No newline at end of file
diff --git a/npc/woodland/alchemist.txt b/npc/woodland/alchemist.txt
deleted file mode 100644
index bc373cbe..00000000
--- a/npc/woodland/alchemist.txt
+++ /dev/null
@@ -1,39 +0,0 @@
-new_9-1.gat,117,77,0 script Rauk 103,{
- mes "[Rauk the Alchemist]";
- mes "I'm learning the ancient science of the alchemy.";
- mes "I already know how to create a couple of potions!!";
- next;
-
- mes "[Rauk the Alchemist]";
- mes "Do you want me to create one for you?";
- next;
-
- menu "Iron potion",L_iron,"Concentration potion",L_concentration,"No thanks.",L_no;
-L_iron:
- if(countitem(566) < 20) goto L_no_iron;
- mes "[Rauk the Alchemist]";
- mes "Great! You brought me exactly what I need!";
- mes "Here it is your Iron potion.";
- delitem 566,20;
- getitem 567,1;
- close;
-
-L_concentration:
- if(countitem(565) < 20) goto L_no_concentration;
- mes "[Rauk the Alchemist]";
- mes "Great! You brought me exactly what I need!";
- mes "Here it is your Concentration potion.";
- delitem 565,20;
- getitem 568,1;
- close;
-
-L_no_iron:
- mes "[Rauk the Alchemist]";
- mes "You have to bring me 20 small mushrooms.";
- close;
-
-L_no_concentration:
- mes "[Rauk the Alchemist]";
- mes "You have to bring me 20 petals.";
- close;
-} \ No newline at end of file
diff --git a/npc/woodland/monsters.txt b/npc/woodland/monsters.txt
deleted file mode 100644
index a25b251b..00000000
--- a/npc/woodland/monsters.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-new_9-1.gat,0,0,0,0 monster EvilMushroom 1013,25,0,0,0
-new_9-1.gat,0,0,0,0 monster SleepFlower 1014,40,0,0,0
diff --git a/npc/woodland/passages.txt b/npc/woodland/passages.txt
deleted file mode 100644
index d67e5882..00000000
--- a/npc/woodland/passages.txt
+++ /dev/null
@@ -1,30 +0,0 @@
-new_9-1.gat,58,91 warp tofield 1,1,new_4-1.gat,15,15
-new_9-1.gat,47,102 warp tosouth 2,2,new_14-1.gat,50,25
-
-new_9-1.gat,73,29,0 script Taro 114,{
-
- mes "[Taro]";
-
- mes "I saw Santa Claus going up this road.";
-
- mes "Will you help me following him?";
-
- next;
-
- menu
-
- "Of course, I'll help you!",yes,
-
- "No, it's probably dangerous out there.",no;
-
-yes:
-
- warp "new_10-1.gat",56,61;
-
- close;
-
-no:
-
- close;
-
-} \ No newline at end of file
diff --git a/npc/xmas/monsters.txt b/npc/xmas/monsters.txt
deleted file mode 100644
index df7ad8a9..00000000
--- a/npc/xmas/monsters.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-new_10-1.gat,0,0,0,0 monster SantaSlime 1015,10,0,0,0
-new_10-1.gat,0,0,0,0 monster RudolphSlime 1016,25,0,0,0 \ No newline at end of file
diff --git a/npc/xmas/snowman.txt b/npc/xmas/snowman.txt
deleted file mode 100644
index 6dbbd001..00000000
--- a/npc/xmas/snowman.txt
+++ /dev/null
@@ -1,44 +0,0 @@
-new_10-1.gat,77,44,0 script Snowman 129,{
-if( ChristmasQuest == 1) goto done;
-mes "[Snowman]";
-mes "Hello there young man.";
-mes "Would you like a Christmas hat?";
-next;
-L_M:
-menu "Yes",L_Y,"No",L_N,"What do you need?",L_R;
- L_Y:
- mes "[Snowman]";
- mes "Hmm, let me see what you have.";
- next;
- if(countitem(510)<15) goto NoItem;
- if(countitem(509)<10) goto NoItem;
- if(countitem(502)<5) goto NoItem;
- mes "Here you go, enjoy your new hat!";
- delitem 510,15;
- delitem 509,10;
- delitem 502,5;
- getitem 511,1;
- set ChristmasQuest,1;
- close;
- L_R:
- mes "[Snowman]";
- mes "For this special hat, I need a pint of magic and a little help.";
- mes "Just kidding. I would like to get some food;";
- mes "15 Candies";
- mes "10 Chocolate bars";
- mes "5 Cactus potions";
- next;
- goto L_M;
- L_N:
- mes "[Snowman]";
- mes "Well, thats too bad, but make sure to have the holiday spirit!";
- close;
- NoItem:
- mes "[Snowman]";
- mes "Well, I am interested in some food and you don't have enought to get a hat.";
- close;
- done:
- mes "[Snowman]";
- mes "Thank you for help!";
- close;
-} \ No newline at end of file
diff --git a/npc/xmas/taro.txt b/npc/xmas/taro.txt
deleted file mode 100644
index b3cf4f1d..00000000
--- a/npc/xmas/taro.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-new_10-1.gat,57,61,0 script Taro 114,{
- mes "[Taro]";
- mes "I'm scared!!!";
- mes "Bring me back, pleeeease!!!";
- next;
- menu
- "Ok",yes,
- "Just give me one more minute.",no;
-yes:
- warp "new_9-1.gat",73,31; close;
-no:
- close;
-} \ No newline at end of file
diff --git a/tools/Purger.java b/tools/Purger.java
index af79d022..3a4a9a7b 100644
--- a/tools/Purger.java
+++ b/tools/Purger.java
@@ -9,153 +9,172 @@ import java.util.*;
public class Purger {
- public static void main(String[] args) {
- if (args.length != 2) {
- System.out.println(
- "Usage: java Purger <folder> <date>\n" +
- " - folder: is the path to account.txt and athena.txt files.\n" +
- " - date: accounts created before this date will be purged (dd/mm/yy).");
- return;
- }
-
- int accounts = 0;
- int characters = 0;
- int deletedCharacters = 0;
- Vector activeAccounts = new Vector();
-
- File oldAccount = new File(args[0] + "account.txt");
- File oldAthena = new File(args[0] + "athena.txt");
- File newAccount = new File(args[0] + "account.txt.new");
- File newAthena = new File(args[0] + "athena.txt.new");
-
- DateFormat dateFormat = new SimpleDateFormat("dd/MM/yy");
- Date purgeDate;
- try {
- purgeDate = dateFormat.parse(args[1]);
- }
- catch (ParseException e) {
- System.out.println("ERROR: Wrong date format.");
- return;
- }
-
- String line;
-
- // Remove accounts
- try {
- FileInputStream fin = new FileInputStream(oldAccount);
- BufferedReader input = new BufferedReader(
- new InputStreamReader(fin));
- FileOutputStream fout = new FileOutputStream(newAccount);
- PrintStream output = new PrintStream(fout);
-
- while ((line = input.readLine()) != null) {
- boolean copy = false;
- String[] fields = line.split("\t");
- // Check if we're reading a comment or the last line
- if (line.substring(0, 2).equals("//") || fields[1].charAt(0) == '%') {
- copy = true;
- }
- else {
- // Server accounts should not be purged
- if (!fields[4].equals("S")) {
- accounts++;
- dateFormat = new SimpleDateFormat("yyyy-MM-dd");
- try {
- Date date = dateFormat.parse(fields[3]);
- if (date.after(purgeDate)) {
- activeAccounts.add(fields[0]);
- copy = true;
- }
- }
- catch (ParseException e) {
- System.out.println(
- "ERROR: Wrong date format in account.txt. ("
- + accounts + ": " + line + ")");
- //return;
- }
- catch (Exception e) {
- e.printStackTrace();
- return;
- }
- }
- else {
- copy = true;
- }
- }
- if (copy) {
- try {
- output.println(line);
- }
- catch (Exception e) {
- System.err.println("ERROR: Unable to write file.");
- }
- }
- }
- input.close();
- output.close();
- }
- catch (FileNotFoundException e ) {
- System.out.println(
- "ERROR: file " + oldAccount.getAbsolutePath() + " not found.");
- return;
- }
- catch (Exception e) {
- System.out.println("ERROR: unable to process account.txt");
- e.printStackTrace();
- return;
- }
-
- System.out.println(
- "Removed " + (accounts - activeAccounts.size()) + "/" +
- accounts + " accounts.");
-
- // Remove characters
- try {
- FileInputStream fin = new FileInputStream(oldAthena);
- BufferedReader input = new BufferedReader(
- new InputStreamReader(fin));
- FileOutputStream fout = new FileOutputStream(newAthena);
- PrintStream output = new PrintStream(fout);
-
- while ((line = input.readLine()) != null) {
- boolean copy = false;
- String[] fields = line.split("\t");
- // Check if we're reading a comment or the last line
- if (line.substring(0, 2).equals("//")
- || fields[1].charAt(0) == '%') {
- copy = true;
- }
- else {
- characters++;
- String id = fields[1].substring(0, fields[1].indexOf(','));
- if (activeAccounts.contains(id)) {
- copy = true;
- }
- else {
- deletedCharacters++;
- }
- }
- if (copy) {
- output.println(line);
- }
- }
- input.close();
- output.close();
- }
- catch (FileNotFoundException e ) {
- System.out.println(
- "ERROR: file " + oldAthena.getAbsolutePath() + " not found.");
- return;
- }
- catch (Exception e) {
- System.out.println("ERROR: unable to process athena.txt");
- e.printStackTrace();
- return;
- }
-
- System.out.println(
- "Removed " + deletedCharacters + "/"
- + characters + " characters.");
- }
-
-} \ No newline at end of file
+ public static void main(String[] args) {
+ if (args.length != 2) {
+ System.out.println(
+ "Usage: java Purger <folder> <date>\n" +
+ " - folder: is the path to account.txt and athena.txt files.\n" +
+ " - date: accounts created before this date will be purged (dd/mm/yy or yyyy-mm-dd).");
+ return;
+ }
+
+ int accounts = 0;
+ int characters = 0;
+ int deletedCharacters = 0;
+ Vector activeAccounts = new Vector();
+
+ File folder = new File(args[0]);
+ // Do some sanity checking
+ if (!folder.exists()) {
+ System.out.println("Folder does not exist!");
+ return;
+ }
+ if (!folder.isDirectory()) {
+ System.out.println("Folder is not a folder!");
+ return;
+ }
+
+ File oldAccount = new File(folder, "account.txt");
+ File oldAthena = new File(folder, "athena.txt");
+ File newAccount = new File(folder, "account.txt.new");
+ File newAthena = new File(folder, "athena.txt.new");
+
+ DateFormat dateFormat;
+ Date purgeDate = null;
+
+ for (String format : new String[] {"dd/MM/yy", "yyyy-MM-dd"}) {
+ dateFormat = new SimpleDateFormat(format);
+
+ try {
+ purgeDate = dateFormat.parse(args[1]);
+ break;
+ } catch (ParseException e) {}
+ }
+
+ if (purgeDate == null) {
+ System.out.println("ERROR: Date format not recognized.");
+ return;
+ }
+
+ String line;
+
+ // Remove accounts
+ try {
+ FileInputStream fin = new FileInputStream(oldAccount);
+ BufferedReader input = new BufferedReader(
+ new InputStreamReader(fin));
+ FileOutputStream fout = new FileOutputStream(newAccount);
+ PrintStream output = new PrintStream(fout);
+
+ while ((line = input.readLine()) != null) {
+ boolean copy = false;
+ String[] fields = line.split("\t");
+ // Check if we're reading a comment or the last line
+ if (line.substring(0, 2).equals("//") || fields[1].charAt(0) == '%') {
+ copy = true;
+ }
+ else {
+ // Server accounts should not be purged
+ if (!fields[4].equals("S")) {
+ accounts++;
+ dateFormat = new SimpleDateFormat("yyyy-MM-dd");
+ try {
+ Date date = dateFormat.parse(fields[3]);
+ if (date.after(purgeDate)) {
+ activeAccounts.add(fields[0]);
+ copy = true;
+ }
+ }
+ catch (ParseException e) {
+ System.out.println(
+ "ERROR: Wrong date format in account.txt. ("
+ + accounts + ": " + line + ")");
+ //return;
+ }
+ catch (Exception e) {
+ e.printStackTrace();
+ return;
+ }
+ }
+ else {
+ copy = true;
+ }
+ }
+ if (copy) {
+ try {
+ output.println(line);
+ }
+ catch (Exception e) {
+ System.err.println("ERROR: Unable to write file.");
+ }
+ }
+ }
+ input.close();
+ output.close();
+ }
+ catch (FileNotFoundException e ) {
+ System.out.println(
+ "ERROR: file " + oldAccount.getAbsolutePath() + " not found.");
+ return;
+ }
+ catch (Exception e) {
+ System.out.println("ERROR: unable to process account.txt");
+ e.printStackTrace();
+ return;
+ }
+
+ System.out.println(
+ "Removed " + (accounts - activeAccounts.size()) + "/" +
+ accounts + " accounts.");
+
+ // Remove characters
+ try {
+ FileInputStream fin = new FileInputStream(oldAthena);
+ BufferedReader input = new BufferedReader(
+ new InputStreamReader(fin));
+ FileOutputStream fout = new FileOutputStream(newAthena);
+ PrintStream output = new PrintStream(fout);
+
+ while ((line = input.readLine()) != null) {
+ boolean copy = false;
+ String[] fields = line.split("\t");
+ // Check if we're reading a comment or the last line
+ if (line.substring(0, 2).equals("//")
+ || fields[1].charAt(0) == '%') {
+ copy = true;
+ }
+ else {
+ characters++;
+ String id = fields[1].substring(0, fields[1].indexOf(','));
+ if (activeAccounts.contains(id)) {
+ copy = true;
+ }
+ else {
+ deletedCharacters++;
+ }
+ }
+ if (copy) {
+ output.println(line);
+ }
+ }
+ input.close();
+ output.close();
+ }
+ catch (FileNotFoundException e ) {
+ System.out.println(
+ "ERROR: file " + oldAthena.getAbsolutePath() + " not found.");
+ return;
+ }
+ catch (Exception e) {
+ System.out.println("ERROR: unable to process athena.txt");
+ e.printStackTrace();
+ return;
+ }
+
+ System.out.println(
+ "Removed " + deletedCharacters + "/"
+ + characters + " characters.");
+ }
+
+}
+