diff options
author | Jesusaves <cpntb1@ymail.com> | 2018-12-31 19:09:49 -0200 |
---|---|---|
committer | Jesusaves <cpntb1@ymail.com> | 2018-12-31 19:09:49 -0200 |
commit | 2f16d8b8c34257733180058c82415d395ea27474 (patch) | |
tree | 09a7e0b77ba01cfade269593ee88c02122fd5976 /npc | |
parent | f4ac215d94dc2c5eb58675f79e0be87932f78cc3 (diff) | |
parent | 28fdcc18ff9c80fea20414482ecc7c74fd0bf9cf (diff) | |
download | serverdata-jesusalva/GuidedTour.tar.gz serverdata-jesusalva/GuidedTour.tar.bz2 serverdata-jesusalva/GuidedTour.tar.xz serverdata-jesusalva/GuidedTour.zip |
Merge branch 'master' into jesusalva/GuidedTourjesusalva/GuidedTour
Diffstat (limited to 'npc')
103 files changed, 3741 insertions, 43 deletions
diff --git a/npc/000-1/chest.txt b/npc/000-1/chest.txt index 46f626a3..511023e0 100644 --- a/npc/000-1/chest.txt +++ b/npc/000-1/chest.txt @@ -25,7 +25,7 @@ getitem OldBook, 1; } - specialeffect(.dir == 0 ? 24 : 25, AREA, getnpcid(0)); // closed ? opening : closing + specialeffect(.dir == 0 ? 24 : 25, AREA, getnpcid()); // closed ? opening : closing .dir = .dir == 0 ? 2 : 6; // closed ? opening : closing .busy = true; // lock until available again initnpctimer; @@ -53,7 +53,7 @@ OnUnTouch: OnTimer30000: .busy = true; .dir = 6; // closing - specialeffect(25, AREA, getnpcid(0)); // closing + specialeffect(25, AREA, getnpcid()); // closing setnpctimer 0; OnTouch: end; diff --git a/npc/000-2-1/chest.txt b/npc/000-2-1/chest.txt index 3f565521..f9ec2742 100644 --- a/npc/000-2-1/chest.txt +++ b/npc/000-2-1/chest.txt @@ -33,7 +33,7 @@ npctalk3 l("You take the clothes from the chest."); } - specialeffect(.dir == 0 ? 24 : 25, AREA, getnpcid(0)); // closed ? opening : closing + specialeffect(.dir == 0 ? 24 : 25, AREA, getnpcid()); // closed ? opening : closing .dir = .dir == 0 ? 2 : 6; // closed ? opening : closing .busy = true; // lock the animation initnpctimer; @@ -61,7 +61,7 @@ OnUnTouch: OnTimer30000: .busy = true; .dir = 6; // closing - specialeffect(25, AREA, getnpcid(0)); // closing + specialeffect(25, AREA, getnpcid()); // closing setnpctimer 0; OnTouch: end; diff --git a/npc/001-1/_import.txt b/npc/001-1/_import.txt index eb522c73..1b748d55 100644 --- a/npc/001-1/_import.txt +++ b/npc/001-1/_import.txt @@ -18,6 +18,7 @@ "npc/001-1/harbours.txt", "npc/001-1/juscare.txt", "npc/001-1/katja.txt", +"npc/001-1/koga.txt", "npc/001-1/lucas.txt", "npc/001-1/manhole.txt", "npc/001-1/mapflags.txt", @@ -28,10 +29,12 @@ "npc/001-1/pious.txt", "npc/001-1/qonan.txt", "npc/001-1/qpid.txt", +"npc/001-1/rowboat.txt", "npc/001-1/rumly.txt", "npc/001-1/salem.txt", "npc/001-1/shop.txt", "npc/001-1/sign.txt", +"npc/001-1/sophialla.txt", "npc/001-1/taree.txt", "npc/001-1/treeleaf.txt", "npc/001-1/trees.txt", diff --git a/npc/001-1/koga.txt b/npc/001-1/koga.txt new file mode 100644 index 00000000..3aecb09a --- /dev/null +++ b/npc/001-1/koga.txt @@ -0,0 +1,20 @@ +// Evol scripts. +// Author: +// Micksha +// Description: +// The Koga in Artis, only accessable via Rowboat. +// THIS IS A PLACEHOLDER! + +001-1,225,59,0 script Koga#001-1 NPC_KOGA,{ + speech + l("Ah, whom did you bring here?"), + l("Isnt that the one Nard found on a float in the sea, with the sign of the Legion on his chest?"); + l("I hope they know what they are doing. So, come on board. I am looking forward to go back to Woodland, haven't been there for a while."); + + close; + +OnInit: + .sex = G_MALE; + .distance = 4; + end; +} diff --git a/npc/001-1/rowboat.txt b/npc/001-1/rowboat.txt new file mode 100644 index 00000000..8682ba0e --- /dev/null +++ b/npc/001-1/rowboat.txt @@ -0,0 +1,20 @@ +// Evol scripts. +// Author: +// Micksha +// Description: +// The rowboat, picking up the player on small beach in order to bring it to Koga. +// THIS IS A PLACEHOLDER! + +001-1,203,64,0 script Rowboat NPC_ROWBOAT_STAND_WE,{ + speech + l("Oh, hi."), + l("In case you don't have a commendatory letter from you-know-whom, I am just sitting here and observe the whales."); + l("Perhaps, and only perhaps, if you bring me the latter, I can bring you to a ship that will perhaps, and only perhaps, be able to bring you to Woodland."); + + close; + +OnInit: + .sex = G_MALE; + .distance = 3; + end; +} diff --git a/npc/001-1/sophialla.txt b/npc/001-1/sophialla.txt new file mode 100644 index 00000000..ad4d508a --- /dev/null +++ b/npc/001-1/sophialla.txt @@ -0,0 +1,20 @@ +// Evol scripts. +// Author: +// Micksha +// Description: +// Sophialla, the connection between Artis and the Brotherhood in Hurns. +// THIS IS A PLACEHOLDER! + +001-1,73,40,0 script Sophialla#001-1 NPC_SOPHIALLA,{ + speech + l("Hello."), + l("Can't you see I am reading? If you need something, tell me the secret password."); + lg("If you don't know it, just go, please."); + + close; + +OnInit: + .sex = G_FEMALE; + .distance = 2; + end; +} diff --git a/npc/001-2-14/_warps.txt b/npc/001-2-14/_warps.txt index 92dff892..4ae630aa 100644 --- a/npc/001-2-14/_warps.txt +++ b/npc/001-2-14/_warps.txt @@ -1,3 +1,3 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Map 001-2-14: Basement warps -001-2-14,26,29,0 warp #001-2-14_26_27 1,0,001-2-12,30,28 +001-2-14,26,27,0 warp #001-2-14_26_27 1,0,001-2-12,30,28 diff --git a/npc/001-2-19/_warps.txt b/npc/001-2-19/_warps.txt index fa091719..cb48d355 100644 --- a/npc/001-2-19/_warps.txt +++ b/npc/001-2-19/_warps.txt @@ -25,7 +25,7 @@ OnInit: } 001-2-19,33,38,0 warp #001-2-19_33_38 0,0,001-1,101,37 -001-2-19,41,57,0 warp #001-2-19_41_55 0,0,001-2-20,29,27 +001-2-19,41,55,0 warp #001-2-19_41_55 0,0,001-2-20,29,27 001-2-19,41,47,0 script #001-2-19_41_47_h NPC_HIDDEN,0,0,{ OnTouch: warp "001-1", 104, 42; diff --git a/npc/001-2-22/chest.txt b/npc/001-2-22/chest.txt index 010f5a79..69e8a8af 100644 --- a/npc/001-2-22/chest.txt +++ b/npc/001-2-22/chest.txt @@ -10,7 +10,7 @@ if (.busy == false) { - specialeffect(.dir == 0 ? 24 : 25, AREA, getnpcid(0)); // closed ? opening : closing + specialeffect(.dir == 0 ? 24 : 25, AREA, getnpcid()); // closed ? opening : closing .dir = .dir == 0 ? 2 : 6; // closed ? opening : closing .busy = true; // lock until available again initnpctimer; @@ -38,7 +38,7 @@ OnUnTouch: OnTimer30000: .busy = true; .dir = 6; // closing - specialeffect(25, AREA, getnpcid(0)); // closing + specialeffect(25, AREA, getnpcid()); // closing setnpctimer 0; OnTouch: end; diff --git a/npc/001-2-27/_warps.txt b/npc/001-2-27/_warps.txt index 60537f04..e69b24d1 100644 --- a/npc/001-2-27/_warps.txt +++ b/npc/001-2-27/_warps.txt @@ -1,3 +1,3 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Map 001-2-27: Blacksmith Shop warps -001-2-27,35,39,0 warp #001-2-27_35_35 0,0,001-1,101,108 +001-2-27,35,35,0 warp #001-2-27_35_35 0,0,001-1,101,108 diff --git a/npc/001-2-33/_warps.txt b/npc/001-2-33/_warps.txt index 0f913422..73adf059 100644 --- a/npc/001-2-33/_warps.txt +++ b/npc/001-2-33/_warps.txt @@ -46,8 +46,8 @@ OnInit: doorInit; } -001-2-33,45,28,0 warp #001-2-33_45_28 0,0,001-2-38,24,28 -001-2-33,23,28,0 warp #001-2-33_23_28 0,0,001-2-37,36,28 -001-2-33,25,44,0 warp #001-2-33_25_40 2,0,001-2-40,27,46 +001-2-33,45,30,0 warp #001-2-33_45_30 0,0,001-2-38,24,28 +001-2-33,23,30,0 warp #001-2-33_23_30 0,0,001-2-37,36,28 +001-2-33,25,40,0 warp #001-2-33_25_40 2,0,001-2-40,27,46 001-2-33,43,40,0 warp #001-2-33_43_40 2,0,001-2-40,45,46 001-2-33,34,46,0 warp #001-2-33_34_46 0,0,001-1,57,42 diff --git a/npc/001-2-36/_warps.txt b/npc/001-2-36/_warps.txt index 9e9c6c70..530050a7 100644 --- a/npc/001-2-36/_warps.txt +++ b/npc/001-2-36/_warps.txt @@ -1,3 +1,3 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Map 001-2-36: unnamed warps -001-2-36,37,30,0 warp #001-2-36_37_29 0,0,001-2-34,24,29 +001-2-36,37,30,0 warp #001-2-36_37_30 0,0,001-2-34,24,29 diff --git a/npc/001-2-4/_warps.txt b/npc/001-2-4/_warps.txt index dc331e97..73e39877 100644 --- a/npc/001-2-4/_warps.txt +++ b/npc/001-2-4/_warps.txt @@ -1,7 +1,7 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Map 001-2-4: Library warps 001-2-4,48,41,0 warp #001-2-4_48_41 0,0,001-1,51,81 -001-2-4,57,29,0 warp #001-2-4_57_26 3,0,001-2-6,57,36 +001-2-4,57,27,0 warp #001-2-4_57_27 3,0,001-2-6,57,36 001-2-4,52,27,0 script #001-2-4_52_27_h NPC_HIDDEN,0,0,{ OnTouch: warp "001-2-5", 28, 37; diff --git a/npc/001-2-40/_warps.txt b/npc/001-2-40/_warps.txt index 83550f10..89c5c721 100644 --- a/npc/001-2-40/_warps.txt +++ b/npc/001-2-40/_warps.txt @@ -1,4 +1,4 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Map 001-2-40: unnamed warps 001-2-40,45,44,0 warp #001-2-40_45_44 2,0,001-2-33,43,39 -001-2-40,27,47,0 warp #001-2-40_27_44 2,0,001-2-33,25,39 +001-2-40,27,44,0 warp #001-2-40_27_44 2,0,001-2-33,25,39 diff --git a/npc/001-2-42/_warps.txt b/npc/001-2-42/_warps.txt index 508aae1b..d8b06045 100644 --- a/npc/001-2-42/_warps.txt +++ b/npc/001-2-42/_warps.txt @@ -1,3 +1,3 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Map 001-2-42: Docks Warehouse Second Level warps -001-2-42,39,38,0 warp #001-2-42_39_37 2,0,001-2-18,39,28 +001-2-42,39,37,0 warp #001-2-42_39_37 2,0,001-2-18,39,28 diff --git a/npc/001-3-0/_import.txt b/npc/001-3-0/_import.txt index 320f28ce..5ead6439 100644 --- a/npc/001-3-0/_import.txt +++ b/npc/001-3-0/_import.txt @@ -2,3 +2,4 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. "npc/001-3-0/_mobs.txt", "npc/001-3-0/_warps.txt", +"npc/001-3-0/mundane.txt", diff --git a/npc/001-3-0/_mobs.txt b/npc/001-3-0/_mobs.txt index 18967b07..88caa962 100644 --- a/npc/001-3-0/_mobs.txt +++ b/npc/001-3-0/_mobs.txt @@ -15,7 +15,7 @@ 001-3-0,175,50,0,4 monster Ratto 1005,2,60000,30000 001-3-0,175,64,3,2 monster Cave Maggot 1027,4,5000,15000 001-3-0,104,75,48,43 monster Cave Maggot 1027,25,500,2000 -001-3-0,91,67,3,5 monster Cave Maggot 1027,3,500,2000 +001-3-0,90,67,2,5 monster Cave Maggot 1027,3,500,2000 001-3-0,128,86,3,5 monster Green Slime 1024,3,500,2000 001-3-0,42,103,3,5 monster Green Slime 1024,3,500,2000 001-3-0,120,85,7,2 monster Little Green Slime 1025,2,500,2000 diff --git a/npc/001-3-0/_warps.txt b/npc/001-3-0/_warps.txt index a2d4e9e2..d192e4ef 100644 --- a/npc/001-3-0/_warps.txt +++ b/npc/001-3-0/_warps.txt @@ -3,6 +3,6 @@ 001-3-0,196,35,0 warp #001-3-0_196_35 0,0,001-1,197,35 001-3-0,172,41,0 warp #001-3-0_172_41 0,0,001-3-1,34,58 001-3-0,162,40,0 warp #001-3-0_162_40 0,0,001-3-1,23,57 -001-3-0,198,59,0 warp #001-3-0_198_59 0,0,001-1,199,61 +001-3-0,198,60,0 warp #001-3-0_198_60 0,0,001-1,199,61 001-3-0,152,55,0 warp #001-3-0_152_55 0,0,001-1,152,51 001-3-0,85,130,0 warp #001-3-0_85_130 0,0,001-1,86,130 diff --git a/npc/001-3-0/mundane.txt b/npc/001-3-0/mundane.txt new file mode 100644 index 00000000..51ffb1bd --- /dev/null +++ b/npc/001-3-0/mundane.txt @@ -0,0 +1,20 @@ +// Evol scripts. +// Author: +// Micksha +// Description: +// Mundane, Monas dad, lost in sewers. +// THIS IS A PLACEHOLDER! + +001-3-0,97,66,0 script Mundane#001-3-0 NPC_MUNDANE,{ + speech + l("Oh, Hi."), + l("I didn't expect someone coming here. I need help."); + lg("Do you know the way out of here? My daughter Mona may worry already."); + + close; + +OnInit: + .sex = G_MALE; + .distance = 2; + end; +} diff --git a/npc/008-1-1/_import.txt b/npc/008-1-1/_import.txt index 7063c99e..b6807450 100644 --- a/npc/008-1-1/_import.txt +++ b/npc/008-1-1/_import.txt @@ -1,2 +1,5 @@ // Map 008-1-1: Woodland // This file is generated automatically. All manually added changes will be removed when running the Converter. +"npc/008-1-1/_mobs.txt", +"npc/008-1-1/_warps.txt", +"npc/008-1-1/koga.txt", diff --git a/npc/008-1-1/_mobs.txt b/npc/008-1-1/_mobs.txt new file mode 100644 index 00000000..8fc5e8ff --- /dev/null +++ b/npc/008-1-1/_mobs.txt @@ -0,0 +1,23 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Map 008-1-1: Woodland mobs +008-1-1,173,86,25,5 monster Forest Maggot 1028,12,500,2500 +008-1-1,132,56,7,5 monster Forest Maggot 1028,5,500,2500 +008-1-1,144,91,11,16 monster Butterfly 1032,8,10000,10000 +008-1-1,63,73,11,5 monster Maggot 1026,7,500,10000 +008-1-1,206,87,6,4 monster Mouboo 1023,3,30000,60000 +008-1-1,131,45,0,0 monster Beehive 1056,1,30000,100000 +008-1-1,156,51,10,4 monster Alizarin Plant 1037,3,1000,25000 +008-1-1,167,61,2,2 monster Pink Flower 1034,1,100,10000 +008-1-1,153,176,9,7 monster Silkworm 1040,4,3000,6000 +008-1-1,96,47,3,2 monster Mauve Plant 1036,3,1000,2000 +008-1-1,162,78,6,3 monster Gamboge Plant 1038,2,1000,10000 +008-1-1,197,67,7,5 monster Cobalt Plant 1039,2,1000,30000 +008-1-1,165,109,2,2 monster Pink Flower 1034,1,100,10000 +008-1-1,217,62,2,2 monster Pink Flower 1034,1,100,10000 +008-1-1,119,66,2,2 monster Pink Flower 1034,1,100,10000 +008-1-1,112,75,2,2 monster Pink Flower 1034,1,100,10000 +008-1-1,110,46,3,2 monster Mauve Plant 1036,3,1000,2000 +008-1-1,159,93,9,7 monster Silkworm 1040,4,3000,6000 +008-1-1,68,29,7,7 monster Mouboo 1023,3,30000,60000 +008-1-1,126,45,0,0 monster Beehive 1056,1,30000,100000 +008-1-1,121,45,0,0 monster Beehive 1056,1,30000,100000 diff --git a/npc/008-1-1/_warps.txt b/npc/008-1-1/_warps.txt new file mode 100644 index 00000000..56d9cc3f --- /dev/null +++ b/npc/008-1-1/_warps.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Map 008-1-1: Woodland warps +008-1-1,247,85,0 warp #008-1-1_247_85 0,1,008-1,21,85 +008-1-1,202,47,0 warp #008-1-1_202_47 0,0,008-3-0,129,112 diff --git a/npc/008-1-1/koga.txt b/npc/008-1-1/koga.txt new file mode 100644 index 00000000..f32e953c --- /dev/null +++ b/npc/008-1-1/koga.txt @@ -0,0 +1,20 @@ +// Evol scripts. +// Author: +// Micksha +// Description: +// The Koga in Artis, only accessable via Rowboat. +// THIS IS A PLACEHOLDER! + +008-1-1,30,60,0 script Koga#008-1-1 NPC_KOGA,{ + speech + l("So, finally, we are here."), + l("Do you want to go back to Artis? You really should be afraid of the Legion there, now that you have been here in Woodland. They somehow smell the odor of the Brotherhood."); + l("Better you stay here for a while. Come back when you are stronger."); + + close; + +OnInit: + .sex = G_MALE; + .distance = 4; + end; +} diff --git a/npc/008-1/_import.txt b/npc/008-1/_import.txt index b7797bf0..31bb5966 100644 --- a/npc/008-1/_import.txt +++ b/npc/008-1/_import.txt @@ -2,7 +2,19 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. "npc/008-1/_mobs.txt", "npc/008-1/_warps.txt", +"npc/008-1/auldsbel.txt", +"npc/008-1/banu.txt", "npc/008-1/confused-tree.txt", -"npc/008-1/doors.txt", +"npc/008-1/hinnak.txt", +"npc/008-1/jack.txt", "npc/008-1/mapflags.txt", +"npc/008-1/mikhail.txt", +"npc/008-1/milly.txt", +"npc/008-1/old-man.txt", +"npc/008-1/old-woman.txt", +"npc/008-1/oscar.txt", +"npc/008-1/sabine.txt", +"npc/008-1/snarfles.txt", +"npc/008-1/soul-menhir.txt", +"npc/008-1/voltain.txt", "npc/008-1/wateranimation.txt", diff --git a/npc/008-1/_warps.txt b/npc/008-1/_warps.txt index ab1728ed..46e9891d 100644 --- a/npc/008-1/_warps.txt +++ b/npc/008-1/_warps.txt @@ -24,3 +24,4 @@ 008-1,257,130,0 warp #008-1_257_130 0,0,008-2-28,25,31 008-1,233,131,0 warp #008-1_233_131 0,0,008-2-29,36,24 008-1,287,133,0 warp #008-1_287_133 0,0,008-2-30,52,39 +008-1,20,85,0 warp #008-1_20_85 0,1,008-1-1,246,85 diff --git a/npc/008-1/auldsbel.txt b/npc/008-1/auldsbel.txt new file mode 100644 index 00000000..cf4cd16e --- /dev/null +++ b/npc/008-1/auldsbel.txt @@ -0,0 +1,20 @@ +// Evol scripts. +// Author: +// Micksha +// Description: +// Auldsbel the Magician. +// THIS IS A PLACEHOLDER! + +008-1,119,114,0 script Auldsbel#008-1 NPC_WIZARD,{ + speech + l("Hello."), + l("Oh, you look more interested in magic.. the brotherhood did forbid most of the interesting paths of magic, but boring baby spells are still allowed."), + lg("If you come back later, I may teach you something. But psst, practising magic is quite dangerous these days."); + + close; + +OnInit: + .sex = G_MALE; + .distance = 2; + end; +} diff --git a/npc/008-1/banu.txt b/npc/008-1/banu.txt new file mode 100644 index 00000000..d8040153 --- /dev/null +++ b/npc/008-1/banu.txt @@ -0,0 +1,21 @@ +// Evol scripts. +// Author: +// Micksha +// Description: +// Banu, the old lady. +// THIS IS A PLACEHOLDER! + +008-1,244,88,0 script Banu#008-1 NPC_OLD_LADY,{ + speech + l("Hello."), + l("You don't have a scythe, by chance? I am too old to mew this field all alone."), + l("I asked Hinnak, but he wants at least a beer in exchange for his scythe."), + lg("But I hate alcohol, so thats not an option for me."); + + close; + +OnInit: + .sex = G_FEMALE; + .distance = 2; + end; +} diff --git a/npc/008-1/doors.txt b/npc/008-1/doors.txt deleted file mode 100644 index de8ed1d8..00000000 --- a/npc/008-1/doors.txt +++ /dev/null @@ -1,6 +0,0 @@ -008-1,104,27,0 script CottageDoor NPC_WARP,0,0,{ - end; - -OnTouch: - dispbottom(l("Locked.")); -} diff --git a/npc/008-1/hinnak.txt b/npc/008-1/hinnak.txt new file mode 100644 index 00000000..08b6242a --- /dev/null +++ b/npc/008-1/hinnak.txt @@ -0,0 +1,354 @@ +// Evol scripts. +// Author: +// gumi, Micksha +// Quest states: +// [1] 0 - cannot do the quest +// [1] 1 - can do the quest +// [1] 2 - hinnak asked for help +// [1] 3 - helped hinnak +// [2] kill counter +// Description: + +// Hinnak needs help to get rid of the same stuff than ever. + +008-1,270,74,0 script Hinnak#008-1 NPC_HINNAK,{ + + if (BaseLevel < .min_level) + { + npctalk3 generic(1 | 16 | 64); + end; + } + + function hinn_new_player + { + if(getequipid(EQI_HEAD_TOP) == .bad_hat) + { + narrator 4, + l("The farmer lunges at you with a farming implement."); + heal -50, 0; + + selectd + l("I'm out of here."), + l("Whoa, what are you doing?"); + + if (@menu == 1) + { + return; + } + + speech 4 | 1, + l("Sorry, you look like a pinkie."), + l("They've been destroying my fields, and I guess I got a bit worked up."); + } + + else + { + speech 4, + l("Argh!"), + l("I hate them!"), + l("I @#$% hate them!"), + l("I @#$% hate these @#$% pinkies!"); + + selectd + l("You need some anger control therapy."), + l("Why do you hate them?"); + + if (@menu == 1) + { + return; + } + + speech 4 | 1, + l("These @#$% beasts are jumping around in my fields destroying all my harvest."), + l("But they are too fast."), + l("I can't catch them."); + } + + selectd + l("Want me to help you?"); + + speech 4 | 1, + l("Yes, you look quite fast."), + l("Maybe you can catch some of them."), + l("That will pay them a lesson."), + l("Slay some of them and bring me %d of their antennae.", .drop_count); + + setq .quest, 2, 0; + + selectd + l("How much is this worth to you?"); + + speech 1, + l("Well, I can't offer you much."), + l("But I got an old scythe laying around."), + l("Maybe you can use it as a weapon."); + + close; + } + + function hinn_help + { + if (getequipid(EQI_HEAD_TOP) == .bad_hat) + { + narrator 4, + l("The farmer glares at your hat."); + } + + speech 4, + l("Have you got the %d antennae?", .drop_count); + + selectd + l("Not yet, but I am working on it."), + rif(countitem(.monster_drop) >= .drop_count, l("Sure, here they are!")); + + if (@menu == 1) + { + return; + } + + if (getq2(.quest) < .kill_count) + { + speech 1, + l("Don't try to fool me!"), + l("I know you didn't kill them yourself!"), + l("Kill at least %d pinkies and come back.", .kill_count); + close; + } + + speech 1, + l("Thank you very much"), + l("As promised, here's my old scythe."), + l("Maybe you can use it as a weapon."), + l("It is a bit cumbersome but its strikes are deadly."); + + if (countitem(.monster_drop) >= .drop_count) + { + delitem .monster_drop, .drop_count; + getitem .reward_item, 1; + Zeny += .reward_money; + //getexp .reward_exp, 0; + setq .quest, 3; + } + close; + } + + function hinn_thanks + { + if (getequipid(EQI_HEAD_TOP) == .bad_hat) + { + speech 4, + l("That better be a trophy on your head."); + + selectd + l("It is."); + + speech 4 | 1, + l("Good then."), + l("Thanks for your help with the pinkies."); + } + + else + { + speech 4, + l("Good to see you again."), + l("Thanks again for helping me with the pinkies!"); + } + + selectd + l("Sure, any time!"), + l("Anything else you want me to do?"), + l("You're welcome. Bye!"); + + if (@menu == 3) + { + return; + } + + speech 4 | 1, + l("Actually, it's been a long day."), + l("If it's no trouble, could you get me a %s?", + getitemlink(.drink_item)); + + selectd + rif(countitem(.drink_item) >= 1, l("Here you are.")), + l("Sure, I'll go get one. Bye!"), + l("You shouldn't drink while working!"); + + do + { + switch (@menu) + { + case 2: return; + case 3: + speech 1, + l("Well, I'm done for the day, and I'm quite old enough to decide when I can have a %s, thank you!", + getitemname(.drink_item)); + selectd + rif(countitem(.drink_item) >= 1, l("Sorry... here you are.")), + l("I don't have any."); + break; + default: + if (countitem(.drink_item) < 1) + { + return; + } + delitem .drink_item, 1; + + narrator 4 | 8 | 2 | 1, + l("%s takes a sip.", .name$); + + speech 4, + l("Aaah!"), + l("Nothing like a well-deserved %s after a long day of tending the crops!", + getitemname(.drink_item)), + l("Thanks, that was very kind of you!"); + + narrator 4 | 8 | 1 | 2, + l("He takes another sip."); + + speech 4, + l("Thanks!"), + l("You know, I had the strangest thing happen to me."), + l("I had this patch of ground that was really clumpy; lots of clay, you see."), + l("Right over there."), + // TODO: move cam to the spot + l("Looks much better now, doesn't it?"), + // TODO: restore cam + l("But how I got there is kind of scary..."), + l("I'd been trying to break it up for a while, but that kind of work is a pain."), + l("So my wife said that I should go and see the witch, just in case she knows something."), + l("And sure enough I ask the witch, and she has a look at it."), + l("“Nothing I can do”, she says, “but I can ask a friend”."), + l("So the next day another witch shows up."), + l("Gorgeous woman, but when she looked at me, the scares went scuttling down my spine..."), + l("First thing she asked was if I'm a farmer."), + l("Said her friend had told her that I needed help."), + l("I show her what the problem is, and she tells me to go inside and wait."); + + narrator 4 | 8 | 1 | 2, + l("%s drains his mug in one long sip, then hesitates.", .name$); + + speech 4, + l("So I go inside."), + l("I'm barely in when it starts raining outside, pouring cats and mouboos!"), + l("Not so weird, perhaps, except that it was been bright and sunny just a second before!"), + l("So I rush out, my wife telling me to leave the witch alone, and I see her standing there in the middle of the rain..."), + l("None of the raindrops touched her, as if they were afraid!"), + l("Then she yells out some gobbledygook word, and out of the ground there comes a swarm of maggots, crawling and digging and climbing over each other's backs..."), + // XXX: maybe here insert a reference to SUSAN? + l("And then she turns to me!"), + l("Seeing her gaze, for a moment there I thought she would turn me into a pinkie, for sure..."), + l("But all she says is, “had you stayed inside, you wouldn't be wet now”."); + + selectd + l("Hahaha!"), + l("Whoah, scary..."), + l("What was that gobbledygook word?"), + l("I better go now. Bye."); + + switch (@menu) + { + case 1: + speech 1, + l("Yeah, funny now..."), + l("But you should've seen that gaze!"), + l("Ah, well, never mind."); + close; + case 2: + speech 1, + l("Yeah, you could say that..."); + close; + case 3: + speech 1, + l("Oh, I can't be sure..."), + l("But something like “Nanaj princino”, I think."); // this is "Dwarven Princess" translated to Esperanto + close; + } + return; + } + } while(true); + } + + // OnTalk: + + if (getq(.quest_inspector) == 11) + { + selectd + l("Did you see anyone in a mask come by here at night?"), + l("Did you see anyone with a large satchel come by here at night?"), + l("Hello."); + + switch (@menu) + { + case 1: + speech + l("No."), + l("It tends to be too dark to see a mask."); + close; + + case 2: + speech + l("Yes, I saw someone with a large sack on their back go to the mining camp."); + close; + } + } + + switch (getq(.quest)) + { + case 0: + case 1: hinn_new_player; break; + case 2: hinn_help; break; + default: hinn_thanks; + } + + closeclientdialog(); + close; + +OnNPCKillEvent: + // XXX: maybe have a OnTakeScript on the pinky antena item so we count pickups instead of kills + if (killedrid == .monster_id && getq(.quest) == 2 && + getq2(.quest) < .kill_count && strcharinfo(PC_MAP) == .map$) + { + setq .quest, 2, getq2(.quest) + 1; + } + end; + +OnPCLoginEvent: +OnPCBaseLvUpEvent: + if (BaseLevel >= .min_level && getq(.quest) < 1) + { + setq .quest, 1; // allow the player to do the quest + dispbottom l("New quest available: %s (level %d+)", + getquestlink(.quest), .min_level); // XXX: requires new manaplus versions, maybe show a different message for old versions? + } + end; + +OnInit: + .min_level = 15; // min level to do the quest + .monster_id = Pinkie; // monster to kill + .monster_drop = PinkAntennae; // monster drop to collect + .drop_count = 10; // amount of that drop needed + .kill_count = 10; // min number of kills + .reward_item = Scythe; // reward item + .reward_money = 0; // reward money + .reward_exp = 0; // reward exp + .bad_hat = PinkieHat; // hinnak attacks you when you wear this hat + .drink_item = Beer; // the item hinnak asks to drink + + .quest = HurnscaldQuests_Hinnak; + .quest_inspector = HurnscaldQuests_Inspector; + .quest_debug = .quest; + .sex = G_MALE; + .distance = 3; + +////////// UNFINISHED ////////// +//////////////////////////////// +// REMOVE THIS CODE WHEN THIS // +// NPC IS NO LONGER A WIP ////// +//////////////////////////////// +//if (!debug) disablenpc(.name$); +///////// UNFINISHED /////////// + + end; +} + diff --git a/npc/008-1/jack.txt b/npc/008-1/jack.txt new file mode 100644 index 00000000..d8f1ff2d --- /dev/null +++ b/npc/008-1/jack.txt @@ -0,0 +1,314 @@ +// Evol scripts. +// Author: +// gumi +// Quest states (forest bow): +// [1] 0 - cannot do the quest +// [1] 1 - can do the quest +// [1] 2 - alan wants to ask jack +// [1] 3 - jack explained problem +// [1] 4 - alan asks to find wood +// [1] 5 - found perfect wood +// [1] 6 - got the bow +// [2] unused +// [3] unused +// [t] unused +// Quest states (wooden shield): +// [1] 0 - cannot do the quest +// [1] 1 - can do the quest +// [1] 2 - jack proposes shield +// [1] 3 - player accepted quest +// [1] 4 - got the shield +// [2] unused +// [3] unused +// [t] unused +// Description: +// Jack Lumber, the handsome lumberjack + + +008-1,241,116,0 script Jack NPC_LUMBERJACK,{ + + function bow_intro { + speech(4, + l("Why not?!"), + l("I value my life, that's why!")); + + selectd(l("What do you mean?")); + + speech(4, + l("A week ago, I was going to chop down one of those twigleaf trees in the forest to the southwest."), + l("These twigleafs are the trees that give me the living wood you speak of."), // XXX: were Log Heads named "Twigleaf" at some point in the past? + l("I was just chopping away with my axe, and guess what happened?"), + l("One of its branches hit me!"), + l("At first, I thought it fell down or the wind blew it, but it hurt!"), + l("After I shook it off and struck the tree again with my axe, another branch hit me!"), + l("I got angry and started to chop off all the low-hanging branches so this couldn't happen anymore."), + l("Even after all that though, I still can't believe what happened next.")); + + selectd(l("What happened?")); + + speech(4, + l("You'll think I'm insane if I tell you...")); + + selectd(l("I won't. I promise.")); + + speech(4, + l("Alright, well..."), + l("After I chopped off a few branches, the whole tree started to move!"), + l("Its roots tore out of the earth, all the branches started to wave around, and a face appeared on the trunk."), + l("The whole tree CAME TO LIFE! It was mad!")); + + selectd(l("Did you run away?"), l("Did you fight it?")); + + speech(4, + l("I fought it, of course!"), + l("I took my axe and attacked the beast!"), + l("It hit me here *points at a bruise on his shoulder*, here *lifts his trouser leg to show another bruise*, and here *lifts his shirt and reveals even worse bruises*."), // XXX: that's kinda dirty imho... maybe we could use the narrator? + l("But I didn't give up!"), + l("I chopped away at it, branch after branch, and in the end I chopped off its roots, and it fell to the ground, motionless.")); + + selectd(l("So you beat the monster? Then why are you so scared?")); + + speech(4, + l("Well, I was exhausted and had to rest."), + l("A few minutes passed, and suddenly I was practically surrounded by a dozen or more of these living trees!")); + + selectd(l("Did you fight them too?")); + + speech(4, + l("Are you crazy?"), + l("I barely destroyed one of those beasts."), + l("I was in no shape to fight again!"), + l("I ran away as fast as I could, and lucky for me the monsters aren't that fast on their tiny root legs, Ha!")); + + selectd(l("So, I guess you aren't chopping down trees anymore?")); + + speech(4, + l("I still do; it's my job."), + l("But I'll no longer chop those twigleafs, I'll tell you that."), + l("I know the bow master wants some twigleaf wood, but I don't care."), + l("I won't risk MY life for a few gold pieces!"), + l("If you really want to, just go to the southwest, but I can't help you."), + l("I won't go there ever again.")); + + selectd(l("Southwest you say? OK, thank you.")); + + speech(l("Don't say I didn't warn you!")); + + // What a huge text wall, I feel sorry for the players + + close2; + setq(.quest_bow, 3); + end; + } + + function bow_good_luck { + if (getq(.quest_inspector) == 2) + { + speech(4, + l("Good luck hunting those tree monsters – you'll need it.")); + + selectd(l("Have you seen anything that might be connected to the recent robberies in town?")); + + speech(l("Sorry, no.")); + close; + } + + npctalk3(l("Good luck hunting those tree monsters – you'll need it.")); + end; + } + + function shield_intro { + speech(4, + l("I have an idea."), + l("What would you say about a new shield?")); + + setq(.quest_shield, 2); + + selectd( + l("No thanks."), + l("Yes, please!"), + rif(getq(.quest_inspector) == 2, l("Have you seen anything that might be connected to the recent robberies in town?"))); + + switch (@menu) + { + case 1: closeclientdialog(); close; + case 2: + speech( + l("All I need is %d %s.", .logs_amount, getitemlink(.logs_item)), + l("This needn't be high quality wood; pretty much any log you can find should work."), + l("Oh, and I'll also need %s E for other materials.", format_number(.shield_cost))); + + close2; + setq(.quest_shield, 3); + end; + case 3: speech(l("Sorry, no.")); close; + } + } + + function bow_congrats { + speech(4, + l("You've finally found that perfect piece of living wood that Alan needs to make a Forest Bow, haven't you?")); + + selectd( + l("I couldn't afford the bow, though..."), + l("No, I'm still looking."), + l("Yes, I've got the Forest bow now."), + l("I'm a melee warrior, I don't need bows."), + rif(getq(.quest_inspector) == 2, l("Have you seen anything that might be connected to the recent robberies in town?"))); + + switch (@menu) + { + case 3: + if (getq(.quest_bow) <= 5) + { + speech(4, + l("Hrmph."), + l("I'm someone who respects those speaking the truth.")); + } + // fallthrough + case 1: + case 4: + speech(4, + l("You no doubt remember how I struggled with those beasts, fighting for my life."), + l("Scared me, those seven-branched little stumps did!"), + l("Never since that day have I strayed near them, and yet there you are, cutting them down one by one."), + l("I'm proud of you – to dare to fight those trunks is admirable indeed."), + l("You're as strong as if you were my own child!")); + + shield_intro; + break; + case 2: speech(l("You should go talk to Alan again.")); close; + case 5: speech(l("Sorry, no.")); close; + } + } + + function shield_make { + speech(4, + l("Do you have the %d %s and %s E for the shield?", + .logs_amount, getitemlink(.logs_item), format_number(.shield_cost))); + + selectd( + rif(countitem(.logs_item) >= .logs_amount && Zeny >= .shield_cost, + l("Here it is.")), + l("I'll come back later.")); + + if (@menu != 1) { + closeclientdialog(); + close; + } + + speech(4, + l("Have a seat.")); + + narrator(4, + l("Jack saws the logs into pieces and then sands them until they are smooth to the touch."), + l("Applying some strong-smelling liquid, he tans them to a darker hue."), + l("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."), + l("Meanwhile, the sun has dried the other pieces."), + l("Jack places them next to each other, adds a frame, and nails everything together."), + l("The resulting shield looks usable already, but Jack applies another liquid to it and leaves it to dry for a few moments."), + l("Finally, he hands the shield to you.")); + + if (checkweight(.shield_item, 1) != true) + { + speech( + l("It seems you can't carry the %s.", getitemlink(.shield_item)), + l("Come back when you do.")); + close; + } + + if (Zeny < .shield_cost || countitem(.logs_item) < .logs_amount) + close; // double-check + + setq(.quest_shield, 4); + delitem(.logs_item, .logs_amount); + getitem(.shield_item, 1); + Zeny -= .shield_cost; + getexp(.shield_exp, 0); + + speech( + l("Enjoy your new shield!")); + + close; + } + + function wood_daily { + speech(4, + l("I hope that my shield will serve you well!")); + + selectd( + l("Me too."), + rif(getq(.quest_inspector) == 2, l("Have you seen anything that might be connected to the recent robberies in town?"))); + + switch (@menu) + { + case 2: speech(l("Sorry, no.")); close; + } + + closeclientdialog(); // TODO: daily quest (needs the generic daily quest script) + close; + } + + // OnTalk: + switch (getq(.quest_shield)) + { + case 2: shield_intro; break; + case 3: shield_make; break; + case 4: wood_daily; break; + } + + switch (getq(.quest_bow)) + { + case 3: + case 4: bow_good_luck; break; + case 5: + case 6: bow_congrats; break; + } + + // initial intro + { + speech(4, + l("Hello there!"), + l("My name is Jack Lumber, the enemy of all trees."), + l("If you need some firewood, just let me know.")); + + selectd( + l("I'll keep that in mind."), + rif(getq(.quest_inspector) == 2, l("Have you seen anything that might be connected to the recent robberies in town?")), + rif(getq(.quest_bow) == 2, l("I heard you aren't delivering any more living wood. Why not?"))); + + switch (@menu) + { + case 2: speech(l("Sorry, no.")); close; + case 3: bow_intro; break; + } + + } + + closeclientdialog(); + close; + +OnInit: + .logs_item = RawLog; + .logs_amount = 40; // XXX: maybe nlogn? + .shield_cost = 5000; // XXX: maybe nlogn? + .shield_exp = 2500; + .shield_item = WoodenShield; + + .quest_bow = HurnscaldQuests_ForestBow; + .quest_shield = HurnscaldQuests_WoodenShield; + .quest_inspector = HurnscaldQuests_Inspector; + .quest_debug = .quest_bow; + .sex = G_MALE; + .distance = 3; + +////////// UNFINISHED ////////// +//////////////////////////////// +// REMOVE THIS CODE WHEN THIS // +// NPC IS NO LONGER A WIP ////// +//////////////////////////////// +//if (!debug) disablenpc(.name$); +///////// UNFINISHED /////////// + + end; +} diff --git a/npc/008-1/mikhail.txt b/npc/008-1/mikhail.txt new file mode 100644 index 00000000..3e442499 --- /dev/null +++ b/npc/008-1/mikhail.txt @@ -0,0 +1,131 @@ +// Evol scripts. +// Author: +// gumi +// Quest states: +// [1] 0 - cannot do the quest +// [1] 1 - can do the quest +// [1] 2 - bernard wants roasted maggot +// [1] 3 - brought maggot +// [1] 4 - bernard wants maggot slime +// [1] 5 - brought maggot slime +// [1] 6 - mikhail needs maggot slime +// [1] 7 - brought maggot slime +// [2] unused +// [3] unused +// [t] unused +// Description: +// takes part in the slime soup quest (Bernard) + +008-1,298,95,0 script Mikhail NPC_MIKHAIL,{ + + function soup_scared { + speech 4, + l("Hello..."), + l("I'm supposed to be helping Bernard from the Inn but..."); + + narrator 4, + l("His eyes grow wide"); + + speech 4, + l("Eeekkk another one."); + + narrator + l("It seems that the boy would like to say more, but seems too terrified at the moment."), + l("Maybe you should help someone else first, so that he sees your intentions are good."); + + close; + } + + function soup_intro2 { + speech 4, + l("Bernard sent me to get %d %s from the %s in the fields, but they scare me so bad!", + .third_item_qty, getitemlink(.third_item), getmonsterlink(.third_item_mob)), + l("You look like a nice person."), + l("Would you go get them for me?"); + + selectd + l("Of course, I'll go get them for you."); + + speech + l("Thank you so much!"), + l("I'll wait for you here."); + + setq .quest, 6; + close; + } + + function soup_reminder_slime2 { + speech + l("Did you bring me the %d %s I need?", + .third_item_qty, getitemlink(.third_item)), + l("It doesn't look like you have them all..."); + close; + } + + function soup_reward_slime2 { + speech + l("Did you bring me the %d %s I need?", + .third_item_qty, getitemlink(.third_item)), + l("Ooh!"), + l("Thank you so much!"), + l("I can get back to Bernard now!"); + + if (countitem(.third_item) < .third_item_qty) + close; // double-check + + delitem .third_item, .third_item_qty; + setq .quest, 7; + getexp .third_reward_exp, 0; + close; + } + + function soup_thanks_slime2 { + speech + l("Thanks again for helping me!") + " %%Q"; + + close; + } + + switch(getq(.quest)) + { + + case 0: + case 1: + case 2: + case 3: + case 4: soup_scared; break; + case 5: soup_intro2; break; + case 6: + if (countitem(.third_item) < .third_item_qty) + soup_reminder_slime2; + else + soup_reward_slime2; + break; + default: soup_thanks_slime2; + } + + closeclientdialog(); + close; + +OnInit: + .third_item = MaggotSlime; + .third_item_qty = 5; + .third_item_mob = Maggot; + + .third_reward_exp = 100; + + .quest = HurnscaldQuests_Soup; + .quest_debug = .quest; + .sex = G_MALE; + .distance = 3; + +////////// UNFINISHED ////////// +//////////////////////////////// +// REMOVE THIS CODE WHEN THIS // +// NPC IS NO LONGER A WIP ////// +//////////////////////////////// +//if (!debug) disablenpc(.name$); +///////// UNFINISHED /////////// + + end; +} diff --git a/npc/008-1/milly.txt b/npc/008-1/milly.txt new file mode 100644 index 00000000..0ea17a1c --- /dev/null +++ b/npc/008-1/milly.txt @@ -0,0 +1,109 @@ +// Evol scripts. +// Author: +// gumi +// Quest states (inspector): +// [1] 0 - cannot do the quest +// [1] 1 - can do the quest +// [1] 2 - talked to inspector (1) <= start +// [1] 3 - talked to old woman (1) +// [1] 4 - talked to old woman (2) +// [1] 5 - talked to inspector (2) +// [1] 6 - talked to troupe leader (1) +// [1] 7 - talked to inspector (3) +// [1] 8 - talked to old man +// [1] 9 - talked to old woman (3) +// [1] 10 - talked to inspector (4) +// [1] 11 - talked to old woman (4) +// [1] 12 - talked to malek +// [1] 13 - searched the bookcase +// [1] 14 - talked to inspector (5) +// [1] 15 - talked to troupe leader (2) <= reward +// [1] 16 - talked to inspector (6) <= reward, end +// [2] unused +// [3] unused +// [t] unused +// Description: +// robberies in hurnscald + +008-1,282,114,0 script Milly NPC_GIRL_MILLY,{ + + // TODO: make the actual beanie copter quest after those are finished: + // [X] Inspector quest + // [ ] Bone knife quest + // [ ] Setzer quest + // [ ] Rossy quest + // [ ] Cindy quest + + .@q_inspector = getq(.quest_inspector); + + speech(4, + l("Hello traveler, welcome to Hurnscald."), + l("Have you met Kfahr yet?"), + l("He is the greatest hero that ever walked the land of Hurnscald!")); + + selectd( + l("Hi! No, I haven't seen him yet."), + l("Where can I find him?"), + l("Mh, I don't care for heroes."), + l("Hello, yes I have met him."), + rif(.@q_inspector == 2, l("Have you seen anything strange lately?")), + rif(.@q_inspector == 2, l("Do you know anything about the recent robberies?"))); + + switch (@menu) + { + case 3: + speech(4, + l("What?"), + l("Surely you do not appreciate what a hero he is!"), + l("Mh, or perhaps honor is dead in you; for you to be so slow to comprehend the good that his exploits have wrought for us."), // XXX: this sentence seems too complicated to come from a child's mouth + l("Put on your thinking cap and be propelled into high adventure!"), + l("Go to Kfahr, and listen to his stories."), + l("You can't have met him."), + l("No one who has met him would say such silly things.")); + // fallthrough + + case 1: + speech(4, + l("I highly recommend you seek him out!")); + // fallthrough + + case 2: + speech( + l("He is a regular at the inn, located in the north-west part of town."), + l("If you are lucky he might tell you a story about his adventures.")); + break; + + case 4: + speech( + l("Oh, I hope you stayed and listened to his stories about his adventures.")); + break; + + case 5: + speech( + l("I haven't seen anything strange.")); + break; + + case 6: + speech( + l("No, sorry.")); + break; + } + + close; + +OnInit: + .quest_inspector = HurnscaldQuests_Inspector; + .quest_debug = .quest_inspector; // TODO: change this to the milly quest debug when it exists + .sex = G_FEMALE; + .distance = 3; + +////////// UNFINISHED ////////// +//////////////////////////////// +// REMOVE THIS CODE WHEN THIS // +// NPC IS NO LONGER A WIP ////// +//////////////////////////////// +//if (!debug) disablenpc(.name$); +///////// UNFINISHED /////////// + + end; +} diff --git a/npc/008-1/old-man.txt b/npc/008-1/old-man.txt new file mode 100644 index 00000000..c2004a7d --- /dev/null +++ b/npc/008-1/old-man.txt @@ -0,0 +1,90 @@ +// Evol scripts. +// Author: +// gumi +// Quest states: +// [1] 0 - cannot do the quest +// [1] 1 - can do the quest +// [1] 2 - talked to inspector (1) <= start +// [1] 3 - talked to old woman (1) +// [1] 4 - talked to old woman (2) +// [1] 5 - talked to inspector (2) +// [1] 6 - talked to troupe leader (1) +// [1] 7 - talked to inspector (3) +// [1] 8 - talked to old man +// [1] 9 - talked to old woman (3) +// [1] 10 - talked to inspector (4) +// [1] 11 - talked to old woman (4) +// [1] 12 - talked to malek +// [1] 13 - searched the bookcase +// [1] 14 - talked to inspector (5) +// [1] 15 - talked to troupe leader (2) <= reward +// [1] 16 - talked to inspector (6) <= reward, end +// [2] unused +// [3] unused +// [t] unused +// Description: +// robberies in hurnscald + +008-1,290,139,0 script Old Man NPC_OLD_MAN_HURNS,{ + + function oldman_ask { + speech(4, + l("Hi there, need something?")); + + selectd( + l("Have you seen anything strange lately?"), + l("Do you know anything about the recent robberies?")); + + speech( + l("I'm sorry, but I didn't see anything."), + l("You should ask my old woman.")); + close; + } + + function oldman_accuse { + speech(4, + l("Found anything new?")); + + selectd( + l("The leader of the troupe said you hung around them a lot while they were in town.")); + + speech( + l("Yes, I hung around the theater a lot."), + l("I was an actor when I was younger."), + l("But I wasn't there that night."), + l("Me and the wife were at home all night.")); + + close2; + setq(.quest_inspector, 8); + end; + } + + // OnTalk: + switch (getq(.quest_inspector)) + { + case 2: oldman_ask; break; + case 7: oldman_accuse; break; + } + + // initial intro + npctalk3(l("Don't let those monsters get to you.")); + end; + +OnInit: + .quest_inspector = HurnscaldQuests_Inspector; + .quest_debug = .quest_inspector; + .sex = G_MALE; + .distance = 1; // this npc has bad hearing + .speed = 2000; // this npc is very old + // TODO: move graph (after the Hurnscald map is finalized) + +////////// UNFINISHED ////////// +//////////////////////////////// +// REMOVE THIS CODE WHEN THIS // +// NPC IS NO LONGER A WIP ////// +//////////////////////////////// +//if (!debug) disablenpc(.name$); +///////// UNFINISHED /////////// + + end; +} diff --git a/npc/008-1/old-woman.txt b/npc/008-1/old-woman.txt new file mode 100644 index 00000000..c6ca467b --- /dev/null +++ b/npc/008-1/old-woman.txt @@ -0,0 +1,137 @@ +/// Evol scripts. +// Author: +// gumi +// Quest states: +// [1] 0 - cannot do the quest +// [1] 1 - can do the quest +// [1] 2 - talked to inspector (1) <= start +// [1] 3 - talked to old woman (1) +// [1] 4 - talked to old woman (2) +// [1] 5 - talked to inspector (2) +// [1] 6 - talked to troupe leader (1) +// [1] 7 - talked to inspector (3) +// [1] 8 - talked to old man +// [1] 9 - talked to old woman (3) +// [1] 10 - talked to inspector (4) +// [1] 11 - talked to old woman (4) +// [1] 12 - talked to malek +// [1] 13 - searched the bookcase +// [1] 14 - talked to inspector (5) +// [1] 15 - talked to troupe leader (2) <= reward +// [1] 16 - talked to inspector (6) <= reward, end +// [2] unused +// [3] unused +// [t] unused +// Description: +// Old Lady in the flower field, Robberies in Hurnscald. + +008-1,231,114,0 script Old Woman NPC_OLD_LADY,{ + + function is_inspector { + return (getequipcardid(EQI_HEAD_MID, 0) == NavyBlueCottonDye /*&& + getequipcardid(EQI_HEAD_LOW, 0) == NavyBlueCottonDye*/); // TODO / FIXME: remove the /* */ whenever we have cotton pants + } + + function oldwoman_ask { + speech(4, + l("Hello deary.")); + + selectd( + l("Have you seen anything strange lately?"), + l("Do you know anything about the recent robberies?")); + + .@q = getq(.quest_inspector); + + if (!is_inspector()) + { + speech(l("Yes, but I'm only talking to the inspector himself!")); + + close2; + if (.@q < 3) + setq(.quest_inspector, 3); + end; + } + + if (.@q == 2 || .@q == 3) + { + speech( + l("I saw someone sneaking around town wearing a theater mask."), + l("It looked like one of the masks used by the troupe that was in town recently.")); + + close2; + setq(.quest_inspector, 4); + } + + else if (.@q == 10) + { + speech( + l("I've remembered something else."), + l("The night the troupe left, I saw someone with a theater mask take a large satchel out of town."), + l("He was heading north.")); + + close2; + setq(.quest_inspector, 11); + } + + end; + } + + function oldwoman_alibi { + speech(4, + l("Hello deary.")); + + selectd( + l("Was your husband with you at home all night the last night that the troupe was in town?")); + + speech( + l("Yes, we were both at home all night.")); + + close2; + setq(.quest_inspector, 9); + end; + } + + function oldwoman_filler { + npctalk3(l("I hope you catch that naughty person!")); + end; + } + + // OnTalk: + switch (getq(.quest_inspector)) + { + case 2: + case 3: oldwoman_ask; break; + case 4: + case 5: + case 6: + case 7: oldwoman_filler; break; + case 8: + case 9: oldwoman_alibi; break; + case 10: oldwoman_ask; break; + } + + // initial intro + if (BaseLevel < 40) + npctalk3(l("Watch out for these flowers. They don't like to be messed with.")); + else + npctalk3(l("Hello deary.")); + end; + +OnInit: + .quest_inspector = HurnscaldQuests_Inspector; + .quest_debug = .quest_inspector; + .sex = G_FEMALE; + .distance = 1; // this npc has bad hearing + .speed = 2000; // this npc is very old + // TODO: move graph (after the Hurnscald map is finalized) + +////////// UNFINISHED ////////// +//////////////////////////////// +// REMOVE THIS CODE WHEN THIS // +// NPC IS NO LONGER A WIP ////// +//////////////////////////////// +//if (!debug) disablenpc(.name$); +///////// UNFINISHED /////////// + + end; +} diff --git a/npc/008-1/oscar.txt b/npc/008-1/oscar.txt new file mode 100644 index 00000000..9541da7b --- /dev/null +++ b/npc/008-1/oscar.txt @@ -0,0 +1,20 @@ +// Evol scripts. +// Author: +// Micksha +// Description: +// Oscar the farmer. +// THIS IS A PLACEHOLDER! + +008-1,160,77,0 script Oscar#008-1 NPC_CAUL,{ + speech + l("Hi, my name is Oscar."), + l("I used to be a farmer, but my magic attempts were banned by the gouvernment."), + lg("Now I remain poor and unemployed."); + + close; + +OnInit: + .sex = G_MALE; + .distance = 2; + end; +} diff --git a/npc/008-1/sabine.txt b/npc/008-1/sabine.txt new file mode 100644 index 00000000..87026efb --- /dev/null +++ b/npc/008-1/sabine.txt @@ -0,0 +1,64 @@ +// Evol scripts. +// Author: +// gumi +// Quest states: +// [1] 0 - cannot do the quest +// [1] 1 - can do the quest +// [1] 2 - talked to inspector (1) <= start +// [1] 3 - talked to old woman (1) +// [1] 4 - talked to old woman (2) +// [1] 5 - talked to inspector (2) +// [1] 6 - talked to troupe leader (1) +// [1] 7 - talked to inspector (3) +// [1] 8 - talked to old man +// [1] 9 - talked to old woman (3) +// [1] 10 - talked to inspector (4) +// [1] 11 - talked to old woman (4) +// [1] 12 - talked to malek +// [1] 13 - searched the bookcase +// [1] 14 - talked to inspector (5) +// [1] 15 - talked to troupe leader (2) <= reward +// [1] 16 - talked to inspector (6) <= reward, end +// [2] unused +// [3] unused +// [t] unused +// Description: +// robberies in hurnscald + +008-1,291,97,0 script Sabine NPC_SABINE,{ + + if (getq(.quest_inspector) != 2) + { + npctalk3(generic(1 | 16)); + end; + } + + speech(4, + l("Isn't this place pretty?"), + l("I love hanging out here!")); + + selectd( + l("Have you seen anything strange lately?"), + l("Do you know anything about the recent robberies?")); + + speech( + l("No, sorry.")); + + close; + +OnInit: + .quest_inspector = HurnscaldQuests_Inspector; + .quest_debug = .quest_inspector; + .sex = G_FEMALE; + .distance = 3; + +////////// UNFINISHED ////////// +//////////////////////////////// +// REMOVE THIS CODE WHEN THIS // +// NPC IS NO LONGER A WIP ////// +//////////////////////////////// +//if (!debug) disablenpc(.name$); +///////// UNFINISHED /////////// + + end; +} diff --git a/npc/008-1/snarfles.txt b/npc/008-1/snarfles.txt new file mode 100644 index 00000000..6ad08867 --- /dev/null +++ b/npc/008-1/snarfles.txt @@ -0,0 +1,20 @@ +// Evol scripts. +// Author: +// Micksha +// Description: +// Snarfles the mouboo farmer. +// THIS IS A PLACEHOLDER! + +008-1,79,118,0 script Snarfles#008-1 NPC_SNARFLES,{ + speech + l("My Mouboos, my beloved Mouboos!"), + l("Oh, hi, isn't it cool to live among all those Mouboos? I don't understand how some people can eat Mouboo steak."), + lg("Murderers!"); + + close; + +OnInit: + .sex = G_MALE; + .distance = 2; + end; +} diff --git a/npc/008-1/soul-menhir.txt b/npc/008-1/soul-menhir.txt new file mode 100644 index 00000000..3c295c92 --- /dev/null +++ b/npc/008-1/soul-menhir.txt @@ -0,0 +1,58 @@ +// Evol scripts. +// Author: +// gumi +// Description: +// place of power, mana refills faster when sitting nearby + +008-1,252,111,0 script Soul Menhir#hurnscald NPC_NO_SPRITE,{ + + end; + +OnRefill: + @menhir_lock = false; + getmapxy(.@map$, .@x, .@y, UNITTYPE_PC); + + if (.@map$ != .map$ || distance(.x, .y, .@x, .@y) > .refill_distance || + !(issit())) + end; + + heal(0, .refill_rate); + end; + + +OnTimer500: + .@count = getunits(BL_PC, .@units[0], false, .map$, (.x - .refill_distance), + (.y - .refill_distance), (.x + .refill_distance), (.y + .refill_distance)); + + for (.@i = 0; .@i < .@count; ++.@i) + { + if (.@units[.@i] < 0) continue; // pre-check, just in case + deltimer(.name$ + "::OnRefill", .@units[.@i]); + if (gettimer(TIMER_COUNT, .@units[.@i], .name$ + "::OnRefill") > 0 || + getvariableofpc(@menhir_lock, .@units[.@i])) { + continue; + } + set(getvariableofpc(@menhir_lock, .@units[.@i]), true); + addtimer(rand(.refill_timer), .name$ + "::OnRefill", .@units[.@i]); + } + + initnpctimer(); + end; + +OnInit: + + .refill_rate = 1; // number of SP to give every refill + .refill_distance = 7; // max distance + .refill_timer = 200; // wait rand(X) ms before refill + initnpctimer(); + +////////// UNFINISHED ////////// +//////////////////////////////// +// REMOVE THIS CODE WHEN THIS // +// NPC IS NO LONGER A WIP ////// +//////////////////////////////// +//if (!debug) disablenpc(.name$); +///////// UNFINISHED /////////// + + end; +} diff --git a/npc/008-1/voltain.txt b/npc/008-1/voltain.txt new file mode 100644 index 00000000..b5f82db0 --- /dev/null +++ b/npc/008-1/voltain.txt @@ -0,0 +1,19 @@ +// Evol scripts. +// Author: +// Micksha +// Description: +// Voltain the dark druid. +// THIS IS A PLACEHOLDER! + +008-1,182,155,0 script Voltain#008-1 NPC_DARK_DRUID,{ + speech + l("Go away, I have to think about new evil doings."), + lg("GO AWAY, I SAID!"); + + close; + +OnInit: + .sex = G_MALE; + .distance = 2; + end; +} diff --git a/npc/008-1/wateranimation.txt b/npc/008-1/wateranimation.txt index 8b66f637..74ff5fd9 100644 --- a/npc/008-1/wateranimation.txt +++ b/npc/008-1/wateranimation.txt @@ -5,5 +5,5 @@ // Description: // Water animations, splash, fishes, etc... -008-1,139,32,0 duplicate(#water_animation0) #water_animation16 NPC_WATER_SPLASH -008-1,140,40,0 duplicate(#water_animation0) #water_animation17 NPC_WATER_SPLASH +008-1,311,97,0 duplicate(#water_animation0) #water_animation16 NPC_WATER_SPLASH +008-1,314,139,0 duplicate(#water_animation0) #water_animation17 NPC_WATER_SPLASH diff --git a/npc/008-2-0/_import.txt b/npc/008-2-0/_import.txt index f2ecc3b8..2cd1023b 100644 --- a/npc/008-2-0/_import.txt +++ b/npc/008-2-0/_import.txt @@ -2,4 +2,5 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. "npc/008-2-0/_savepoints.txt", "npc/008-2-0/_warps.txt", +"npc/008-2-0/celestia.txt", "npc/008-2-0/mapflags.txt", diff --git a/npc/008-2-0/celestia.txt b/npc/008-2-0/celestia.txt new file mode 100644 index 00000000..d6ce7bc5 --- /dev/null +++ b/npc/008-2-0/celestia.txt @@ -0,0 +1,20 @@ +// Evol scripts. +// Author: +// Micksha +// Description: +// Our beloved Princess Celestia. +// THIS IS A PLACEHOLDER! + +008-2-0,30,23,0 script Celestia NPC_CELESTIA,{ + speech + l("Hi!"), + lg("You may remember me, I am Celestia."); + l("Take a cup of tea until something happens here."); + + close; + +OnInit: + .sex = G_FEMALE; + .distance = 2; + end; +} diff --git a/npc/008-2-1/_import.txt b/npc/008-2-1/_import.txt index 1e5137a7..06ba6d3b 100644 --- a/npc/008-2-1/_import.txt +++ b/npc/008-2-1/_import.txt @@ -2,4 +2,8 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. "npc/008-2-1/_savepoints.txt", "npc/008-2-1/_warps.txt", +"npc/008-2-1/generalstore.txt", +"npc/008-2-1/inspector.txt", "npc/008-2-1/mapflags.txt", +"npc/008-2-1/richard.txt", +"npc/008-2-1/selim.txt", diff --git a/npc/008-2-1/generalstore.txt b/npc/008-2-1/generalstore.txt new file mode 100644 index 00000000..73b24a5e --- /dev/null +++ b/npc/008-2-1/generalstore.txt @@ -0,0 +1,20 @@ +// Evol scripts. +// Author: +// Micksha +// Description: +// General Store. +// THIS IS A PLACEHOLDER! + +008-2-1,38,35,0 script Generalstore#008-1 NPC_GENERAL_STORE,{ + speech + l("Hi!"), + l("My name is General Store, they still call me this although I left the army a few years ago."); + lg("I have nothing to sell, come back later."); + + close; + +OnInit: + .sex = G_MALE; + .distance = 2; + end; +} diff --git a/npc/008-2-1/inspector.txt b/npc/008-2-1/inspector.txt new file mode 100644 index 00000000..725f5cbd --- /dev/null +++ b/npc/008-2-1/inspector.txt @@ -0,0 +1,190 @@ +// Evol scripts. +// Author: +// gumi +// Quest states: +// [1] 0 - cannot do the quest +// [1] 1 - can do the quest +// [1] 2 - talked to inspector (1) <= start +// [1] 3 - talked to old woman (1) +// [1] 4 - talked to old woman (2) +// [1] 5 - talked to inspector (2) +// [1] 6 - talked to troupe leader (1) +// [1] 7 - talked to inspector (3) +// [1] 8 - talked to old man +// [1] 9 - talked to old woman (3) +// [1] 10 - talked to inspector (4) +// [1] 11 - talked to old woman (4) +// [1] 12 - talked to malek +// [1] 13 - searched the bookcase +// [1] 14 - talked to inspector (5) +// [1] 15 - talked to troupe leader (2) <= reward +// [1] 16 - talked to inspector (6) <= reward, end +// [2] unused +// [3] unused +// [t] unused +// Description: +// robberies in hurnscald + +008-2-1,30,34,0 script Inspector NPC_INSPECTOR,{ + + if (BaseLevel < .min_level) + { + npctalk3(l("I'm sorry, but I'm busy looking into this string of robberies.")); + end; + } + + // OnTalk: + switch (getq(.quest)) + { + case 0: + case 1: + speech(4, + l("Hmm... what to do.")); + narrator(4, + l("He looks up and into your face.")); + speech(4, + l("You look capable, will you help me solve these robberies?"), + l("I would go myself, but for some reason I'm a non-walking NPC.")); + + if (selectd("Yes", "No") == 2) { + closeclientdialog(); + close; + } + + speech( + l("Ok then."), + l("I'd like you to ask the villagers about the recent string of robberies.")); + + close2; + setq(.quest, 2); + end; + + case 2: + npctalk3(l("Please continue talking to the villagers.")); + end; + + case 3: + speech( + l("Hm..."), + l("I don't know if I trust her eyesight or memory."), + l("See if someone else knows anything.")); + close; + + case 4: + speech( + l("Someone in a theater mask, eh?"), + l("There was a traveling theater troupe in town recently, but they've moved on to Tulimshar."), + l("Please go talk to their leader about this.")); + + close2; + setq(.quest, 5); + end; + + case 5: + npctalk3(l("Please go talk to the leader of the traveling troupe about the theater mask.")); + end; + + case 6: + speech( + l("Hm... an old man?"), + l("Could you interrogate him for me?")); + + close2; + setq(.quest, 7); + end; + + case 7: + npctalk3(l("Have you talked with the old man yet?")); + end; + + case 8: + npctalk3(l("Can you verify that with his wife?")); + end; + + case 9: + speech( + l("Hm... then it couldn't be him."), + l("I'm not sure where to go from here, maybe you can find something else."), + l("Try talking to everyone again.")); + + close2; + setq(.quest, 10); + end; + + case 10: + npctalk3(l("Made any progress yet?")); + end; + + case 11: + npctalk3(l("Then go north and investigate!")); + end; + + case 12: + npctalk3(l("Did you look over the basement?")); + end; + + case 13: + speech( + l("What a strange note."), + l("I'll keep track of this, while you return the mask to the troupe."), + l("I would go myself, but the developers were too lazy to make me walk."), + "...", + l("By the way, stay sharp! I may call upon you again.")); + + close2; + setq(.quest, 14); + end; + + case 14: + npctalk3(l("Please return the mask to the traveling troupe.")); + end; + + case 15: + speech( + l("My men have found all of the stolen items."), + l("They were all in the mining camp."), + l("We still don't know who did it.")); // XXX: feel free to extend this quest beyond this point + + close2; + setq(.quest, 16); + getexp(.reward_exp, 0); + end; + + case 16: + npctalk3(l("Remember to stay sharp. I might need your help on another case.")); + end; + } + + closeclientdialog(); + close; + +OnPCLoginEvent: +OnPCBaseLvUpEvent: + if (BaseLevel >= .min_level && getq(.quest) < 1) + { + setq(.quest, 1); // allow the player to do the quest + dispbottom(l("New quest available: %s (level %d+)", + getquestlink(.quest), .min_level)); // XXX: requires new manaplus versions, maybe show a different message for old versions? + } + end; + +OnInit: + .min_level = 20; // min level to do the quest + + .reward_exp = 2500; + + .quest = HurnscaldQuests_Inspector; + .quest_debug = .quest; + .sex = G_MALE; + .distance = 3; + +////////// UNFINISHED ////////// +//////////////////////////////// +// REMOVE THIS CODE WHEN THIS // +// NPC IS NO LONGER A WIP ////// +//////////////////////////////// +//if (!debug) disablenpc(.name$); +///////// UNFINISHED /////////// + + end; +} diff --git a/npc/008-2-1/richard.txt b/npc/008-2-1/richard.txt new file mode 100644 index 00000000..958ecab4 --- /dev/null +++ b/npc/008-2-1/richard.txt @@ -0,0 +1,20 @@ +// Evol scripts. +// Author: +// Micksha +// Description: +// Richard the Hurns storage guy. +// THIS IS A PLACEHOLDER! + +008-2-1,26,35,0 script Richard#008-1 NPC_RICHARD_LEGACY,{ + speech + l("Oh hey!"), + l("I was supposed to act as storagekeeper, but I forgot my key."); + lg("Come back later, perhaps I can find it."); + + close; + +OnInit: + .sex = G_MALE; + .distance = 2; + end; +} diff --git a/npc/008-2-1/selim.txt b/npc/008-2-1/selim.txt new file mode 100644 index 00000000..c578f6cd --- /dev/null +++ b/npc/008-2-1/selim.txt @@ -0,0 +1,19 @@ +// Evol scripts. +// Author: +// Micksha +// Description: +// Selim the Dyer. +// THIS IS A PLACEHOLDER! + +008-1,38,40,0 script Selim#008-1 NPC_GUMI_THE_DYER,{ + speech + l("Oh hey!"), + lg("Good you are here, you could be handy for me right now."); + + close; + +OnInit: + .sex = G_MALE; + .distance = 2; + end; +} diff --git a/npc/008-2-10/_import.txt b/npc/008-2-10/_import.txt index 994726eb..2dd9ec77 100644 --- a/npc/008-2-10/_import.txt +++ b/npc/008-2-10/_import.txt @@ -1,4 +1,5 @@ // Map 008-2-10: Hurnscald City Hall // This file is generated automatically. All manually added changes will be removed when running the Converter. "npc/008-2-10/_warps.txt", +"npc/008-2-10/airlia.txt", "npc/008-2-10/mapflags.txt", diff --git a/npc/008-2-10/airlia.txt b/npc/008-2-10/airlia.txt new file mode 100644 index 00000000..cb7aced2 --- /dev/null +++ b/npc/008-2-10/airlia.txt @@ -0,0 +1,20 @@ +// Evol scripts. +// Author: +// Micksha +// Description: +// Airlia, the major's daughter. +// THIS IS A PLACEHOLDER! + +008-2-10,42,29,0 script Airlia#008-2-8 NPC_AIRLIA,{ + speech + l("Hello."), + l("Do you know where the graveyard is?"), + lg("No? Better is that. Its so dangerous there."); + + close; + +OnInit: + .sex = G_FEMALE; + .distance = 2; + end; +} diff --git a/npc/008-2-12/_import.txt b/npc/008-2-12/_import.txt index 88a854e4..f5f593a2 100644 --- a/npc/008-2-12/_import.txt +++ b/npc/008-2-12/_import.txt @@ -2,3 +2,4 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. "npc/008-2-12/_warps.txt", "npc/008-2-12/mapflags.txt", +"npc/008-2-12/nurse.txt", diff --git a/npc/008-2-12/nurse.txt b/npc/008-2-12/nurse.txt new file mode 100644 index 00000000..29452258 --- /dev/null +++ b/npc/008-2-12/nurse.txt @@ -0,0 +1,101 @@ +// Evol scripts. +// Author: +// gumi +// Quest states: +// [1] 0 - cannot do the quest +// [1] 1 - can do the quest +// [1] 2 - talked to inspector (1) <= start +// [1] 3 - talked to old woman (1) +// [1] 4 - talked to old woman (2) +// [1] 5 - talked to inspector (2) +// [1] 6 - talked to troupe leader (1) +// [1] 7 - talked to inspector (3) +// [1] 8 - talked to old man +// [1] 9 - talked to old woman (3) +// [1] 10 - talked to inspector (4) +// [1] 11 - talked to old woman (4) +// [1] 12 - talked to malek +// [1] 13 - searched the bookcase +// [1] 14 - talked to inspector (5) +// [1] 15 - talked to troupe leader (2) <= reward +// [1] 16 - talked to inspector (6) <= reward, end +// [2] unused +// [3] unused +// [t] unused +// Description: +// Hurnscald Nurse. Robberies in Hurnscald. + +008-2-12,28,30,0 script Nurse NPC_NURSE_LEGACY,{ + + speech(4, + l("How can I help you?")); + + // TODO: check for AxeHat when we get it + // XXX: this npc used to teach the resist poison skill, do we still want that? + + selectd( + l("Oooh, these wounds! They hurt so much!"), + l("I don't feel so well, I might be sick."), + l("No, I'm fine."), + rif(getq(.quest_inspector) == 2, l("Have you seen anything out of the ordinary?"))); + + switch (@menu) + { + case 1: + if (BaseLevel > .heal_max_level) + { + speech( + l("I'm sorry but I'm here only to help young people."), // XXX: this sounds cruel towards elderly people + l("Your level is already higher than %d.", .heal_max_level), + l("You can get some rest at the inn near here.")); + close; + } + speech(4, + l("Here, let me heal you.")); + + npcskill(AL_HEAL, .heal_skill_level, .heal_npc_stats, .heal_npc_level); + + speech( + l("There you go, like new.")); + close; + case 2: + speech( + l("Then you should better see the doctor."), + l("He is usually in his office on the 3rd floor.")); + close; + case 3: + speech( + l("Then I would ask you to leave."), + l("There are people who really need our help.")); + close; + case 4: + speech( + l("I'm too busy here to observe the town.")); + close; + } + + + end; + +OnInit: + .heal_max_level = 20; // she will only heal low level players + + .heal_skill_level = 10; // what level of the healing skill to use + .heal_npc_stats = 99; // what stat points the NPC has + .heal_npc_level = 60; // what level the npc has + + .quest_inspector = HurnscaldQuests_Inspector; + .quest_debug = .quest_inspector; + .sex = G_FEMALE; + .distance = 3; + +////////// UNFINISHED ////////// +//////////////////////////////// +// REMOVE THIS CODE WHEN THIS // +// NPC IS NO LONGER A WIP ////// +//////////////////////////////// +if (!debug) disablenpc(.name$); +///////// UNFINISHED /////////// + + end; +} diff --git a/npc/008-2-13/_import.txt b/npc/008-2-13/_import.txt index a4b0330e..ec6a73b7 100644 --- a/npc/008-2-13/_import.txt +++ b/npc/008-2-13/_import.txt @@ -2,4 +2,5 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. "npc/008-2-13/_savepoints.txt", "npc/008-2-13/_warps.txt", +"npc/008-2-13/lena.txt", "npc/008-2-13/mapflags.txt", diff --git a/npc/008-2-13/lena.txt b/npc/008-2-13/lena.txt new file mode 100644 index 00000000..df9f38e9 --- /dev/null +++ b/npc/008-2-13/lena.txt @@ -0,0 +1,20 @@ +// Evol scripts. +// Author: +// Micksha +// Description: +// Lena the Bowwoman. +// THIS IS A PLACEHOLDER! + +008-2-13,27,27,0 script Lena#008-2-13 NPC_LENA,{ + speech + l("Hey."), + l("Did you hear about the Bandit's attacks? They must have a hideout somewhere outside Hurnscald."), + lg("I will inform you when I have more information about all this."); + + close; + +OnInit: + .sex = G_FEMALE; + .distance = 2; + end; +} diff --git a/npc/008-2-14/_import.txt b/npc/008-2-14/_import.txt index 29a984e8..818ced88 100644 --- a/npc/008-2-14/_import.txt +++ b/npc/008-2-14/_import.txt @@ -2,4 +2,5 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. "npc/008-2-14/_savepoints.txt", "npc/008-2-14/_warps.txt", +"npc/008-2-14/doctor.txt", "npc/008-2-14/mapflags.txt", diff --git a/npc/008-2-14/doctor.txt b/npc/008-2-14/doctor.txt new file mode 100644 index 00000000..52c8653c --- /dev/null +++ b/npc/008-2-14/doctor.txt @@ -0,0 +1,80 @@ +// Evol scripts. +// Author: +// gumi +// Quest states: +// [1] 0 - cannot do the quest +// [1] 1 - can do the quest +// [1] 2 - talked to inspector (1) <= start +// [1] 3 - talked to old woman (1) +// [1] 4 - talked to old woman (2) +// [1] 5 - talked to inspector (2) +// [1] 6 - talked to troupe leader (1) +// [1] 7 - talked to inspector (3) +// [1] 8 - talked to old man +// [1] 9 - talked to old woman (3) +// [1] 10 - talked to inspector (4) +// [1] 11 - talked to old woman (4) +// [1] 12 - talked to malek +// [1] 13 - searched the bookcase +// [1] 14 - talked to inspector (5) +// [1] 15 - talked to troupe leader (2) <= reward +// [1] 16 - talked to inspector (6) <= reward, end +// [2] unused +// [3] unused +// [t] unused +// Description: +// The crazy Hurnscald Doctor. + +008-2-14,27,27,0 script Doctor NPC_DOCTOR_LEGACY,{ + + speech(4, + l("Hello, can I help you?")); + + // TODO: check for AxeHat when we get it + // TODO: check for EyePatch when we get it + + selectd( + l("I think I am sick!"), + l("No, I feel fine."), + rif(getq(.quest_inspector) == 2, l("Have you seen anything strange in town? Anything that might have to do with the robberies?"))); + + switch (@menu) + { + case 1: + narrator(4, + l("The doctor examines you briefly.")); + // TODO: check for poison or other status conditions currently in use + speech( + l("Nonsense!"), + l("You look fine and dandy to me."), + l("All you need is a bit more exercise and fresh fruit in your diet!")); + close; + case 2: + speech( + l("Then please stop wasting my precious time.")); + close; + case 3: + speech( + l("No, I haven't seen anything.")); + close; + } + + + end; + +OnInit: + .quest_inspector = HurnscaldQuests_Inspector; + .quest_debug = .quest_inspector; + .sex = G_MALE; + .distance = 3; + +////////// UNFINISHED ////////// +//////////////////////////////// +// REMOVE THIS CODE WHEN THIS // +// NPC IS NO LONGER A WIP ////// +//////////////////////////////// +//if (!debug) disablenpc(.name$); +///////// UNFINISHED /////////// + + end; +} diff --git a/npc/008-2-17/_import.txt b/npc/008-2-17/_import.txt index d90289e3..854dad03 100644 --- a/npc/008-2-17/_import.txt +++ b/npc/008-2-17/_import.txt @@ -1,3 +1,5 @@ // Map 008-2-17: Mining Camp // This file is generated automatically. All manually added changes will be removed when running the Converter. "npc/008-2-17/_warps.txt", +"npc/008-2-17/angus.txt", +"npc/008-2-17/caul.txt", diff --git a/npc/008-2-17/_warps.txt b/npc/008-2-17/_warps.txt index 9857c005..1010521a 100644 --- a/npc/008-2-17/_warps.txt +++ b/npc/008-2-17/_warps.txt @@ -1,5 +1,5 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Map 008-2-17: Mining Camp warps 008-2-17,52,40,0 warp #008-2-17_52_40 0,0,008-1,236,40 -008-2-17,25,42,0 warp #008-2-17_25_39 1,0,008-2-18,22,24 +008-2-17,25,39,0 warp #008-2-17_25_39 1,0,008-2-18,22,24 008-2-17,24,34,0 warp #008-2-17_24_34 0,0,008-2-19,20,29 diff --git a/npc/008-2-17/angus.txt b/npc/008-2-17/angus.txt new file mode 100644 index 00000000..3efeefb6 --- /dev/null +++ b/npc/008-2-17/angus.txt @@ -0,0 +1,20 @@ +// Evol scripts. +// Author: +// Micksha +// Description: +// Angus the Smith. +// THIS IS A PLACEHOLDER! + +008-2-17,34,47,0 script Angus#008-2-17 NPC_ANGUS_THE_SMITH,{ + speech + l("Hello."), + l("Do you need your pickaxe or your shovel fixed? Then I am your man."), + lg("If you want to play with unicorns, you better piss off now."); + + close; + +OnInit: + .sex = G_MALE; + .distance = 2; + end; +} diff --git a/npc/008-2-17/caul.txt b/npc/008-2-17/caul.txt new file mode 100644 index 00000000..41c5488c --- /dev/null +++ b/npc/008-2-17/caul.txt @@ -0,0 +1,20 @@ +// Evol scripts. +// Author: +// Micksha +// Description: +// Caul the Alchemist. +// THIS IS A PLACEHOLDER! + +008-2-17,40,33,0 script Caul#008-2-17 NPC_CAUL,{ + speech + l("Hi there."), + l("Don't you like the smoke, when there is a nice fire beneath a cauldron?"), + lg("Honestly, sometimes I prefer nice explosions. Better keep back!"); + + close; + +OnInit: + .sex = G_MALE; + .distance = 2; + end; +} diff --git a/npc/008-2-18/_import.txt b/npc/008-2-18/_import.txt index 4f791e6f..5035c75c 100644 --- a/npc/008-2-18/_import.txt +++ b/npc/008-2-18/_import.txt @@ -1,3 +1,4 @@ // Map 008-2-18: Mining Camp First Floor // This file is generated automatically. All manually added changes will be removed when running the Converter. "npc/008-2-18/_warps.txt", +"npc/008-2-18/malik.txt", diff --git a/npc/008-2-18/malik.txt b/npc/008-2-18/malik.txt new file mode 100644 index 00000000..ab95dc92 --- /dev/null +++ b/npc/008-2-18/malik.txt @@ -0,0 +1,65 @@ +// Evol scripts. +// Author: +// gumi +// Quest states: +// [1] 0 - cannot do the quest +// [1] 1 - can do the quest +// [1] 2 - talked to inspector (1) <= start +// [1] 3 - talked to old woman (1) +// [1] 4 - talked to old woman (2) +// [1] 5 - talked to inspector (2) +// [1] 6 - talked to troupe leader (1) +// [1] 7 - talked to inspector (3) +// [1] 8 - talked to old man +// [1] 9 - talked to old woman (3) +// [1] 10 - talked to inspector (4) +// [1] 11 - talked to old woman (4) +// [1] 12 - talked to malek +// [1] 13 - searched the bookcase +// [1] 14 - talked to inspector (5) +// [1] 15 - talked to troupe leader (2) <= reward +// [1] 16 - talked to inspector (6) <= reward, end +// [2] unused +// [3] unused +// [t] unused +// Description: +// robberies in hurnscald +// TODO: Make Malik prepare Crude Gem from shards, and make him produce Gem Powder later, once the player visited Tulim(dont tell WildX, though) + +008-2-18,32,24,0 script Malik#008-2-18 NPC_MALIK,{ + if (getq(.quest_inspector) == 11) + { + speech(4, + l("Hi, can I help you at all?")); + + selectd( + l("The inspector sent me here to investigate.")); + + speech(4, + l("Yeah, we did hear a commotion."), + l("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.")); + + close2; + setq(.quest_inspector, 12); + end; + } + + npctalk3(generic(32 | 256)); + end; + +OnInit: + .quest_inspector = HurnscaldQuests_Inspector; + .quest_debug = .quest_inspector; + .sex = G_MALE; + .distance = 3; + +////////// UNFINISHED ////////// +//////////////////////////////// +// REMOVE THIS CODE WHEN THIS // +// NPC IS NO LONGER A WIP ////// +//////////////////////////////// +//if (!debug) disablenpc(.name$); +///////// UNFINISHED /////////// + + end; +} diff --git a/npc/008-2-19/_import.txt b/npc/008-2-19/_import.txt index c080bfb8..1d12e589 100644 --- a/npc/008-2-19/_import.txt +++ b/npc/008-2-19/_import.txt @@ -1,3 +1,4 @@ // Map 008-2-19: Mining Camp Basement // This file is generated automatically. All manually added changes will be removed when running the Converter. "npc/008-2-19/_warps.txt", +"npc/008-2-19/books.txt", diff --git a/npc/008-2-19/books.txt b/npc/008-2-19/books.txt new file mode 100644 index 00000000..81cd4b98 --- /dev/null +++ b/npc/008-2-19/books.txt @@ -0,0 +1,60 @@ +// Evol scripts. +// Author: +// gumi +// Quest states: +// [1] 0 - cannot do the quest +// [1] 1 - can do the quest +// [1] 2 - talked to inspector (1) <= start +// [1] 3 - talked to old woman (1) +// [1] 4 - talked to old woman (2) +// [1] 5 - talked to inspector (2) +// [1] 6 - talked to troupe leader (1) +// [1] 7 - talked to inspector (3) +// [1] 8 - talked to old man +// [1] 9 - talked to old woman (3) +// [1] 10 - talked to inspector (4) +// [1] 11 - talked to old woman (4) +// [1] 12 - talked to malek +// [1] 13 - searched the bookcase +// [1] 14 - talked to inspector (5) +// [1] 15 - talked to troupe leader (2) <= reward +// [1] 16 - talked to inspector (6) <= reward, end +// [2] unused +// [3] unused +// [t] unused +// Description: +// robberies in hurnscald + +008-2-19,33,21,0 script bookcase NPC_NO_SPRITE,{ + + if (getq(.quest_inspector) != 12) + { + dispbottom(l("You see an ordinary bookcase.")); + end; + } + + narrator( + l("You see an ordinary bookcase."), + l("Looking over closely, you find a book that is upside down."), + l("The book has been hollowed out."), + l("Inside is a theater mask and a note that you cannot even begin to read.")); + + close2; + setq(.quest_inspector, 13); + end; + +OnInit: + .quest_inspector = HurnscaldQuests_Inspector; + .quest_debug = .quest_inspector; + .distance = 1; + +////////// UNFINISHED ////////// +//////////////////////////////// +// REMOVE THIS CODE WHEN THIS // +// NPC IS NO LONGER A WIP ////// +//////////////////////////////// +if (!debug) disablenpc(.name$); +///////// UNFINISHED /////////// + + end; +} diff --git a/npc/008-2-2/_import.txt b/npc/008-2-2/_import.txt index 5a896da0..34d628f7 100644 --- a/npc/008-2-2/_import.txt +++ b/npc/008-2-2/_import.txt @@ -1,4 +1,11 @@ // Map 008-2-2: The Rusty Pick // This file is generated automatically. All manually added changes will be removed when running the Converter. "npc/008-2-2/_warps.txt", +"npc/008-2-2/barron.txt", +"npc/008-2-2/kfahr.txt", +"npc/008-2-2/ledmitz.txt", "npc/008-2-2/mapflags.txt", +"npc/008-2-2/melania.txt", +"npc/008-2-2/melinda.txt", +"npc/008-2-2/note.txt", +"npc/008-2-2/shop.txt", diff --git a/npc/008-2-2/barron.txt b/npc/008-2-2/barron.txt new file mode 100644 index 00000000..c64efa40 --- /dev/null +++ b/npc/008-2-2/barron.txt @@ -0,0 +1,32 @@ +// Evol scripts. +// Author: +// Micksha +// Description: +// Barron, the bartender of the Rusty Pick. + +008-2-2,43,28,0 script Barron#008-2-2 NPC_GENERAL_STORE,{ +speech S_LAST_NEXT, + l("Hi!"), + l("I am the bartender here, can I provide you with some delicious beverage?"), + l("Or you can take seat and ask Melinda if you need something."); + + switch (select(l("What beverages do you have?"), + l("I'll ask Melinda later"))) + { + case 1: + closeclientdialog; + shop "#Invisible008-2-2"; + close; + case 2: + speech S_FIRST_BLANK_LINE, + l("Make sure to tip her, it will brighten up her day."); + close; + } + + + +OnInit: + .sex = G_MALE; + .distance = 3; + end; +} diff --git a/npc/008-2-2/kfahr.txt b/npc/008-2-2/kfahr.txt new file mode 100644 index 00000000..0ffae5df --- /dev/null +++ b/npc/008-2-2/kfahr.txt @@ -0,0 +1,20 @@ +// Evol scripts. +// Author: +// Micksha +// Description: +// Kfahr the hero. +// THIS IS A PLACEHOLDER! + +008-2-2,44,36,0 script Kfahr#008-2-2 NPC_YOUNG_MAN_KFAHR,{ + speech + l("Oh hey *hicks*"), + l("This waitress *hicks* is great, she never stops to bring beer *hicks."); + lg("When I am less busy *hicks*, I can tell you stories of my heroism."); + + close; + +OnInit: + .sex = G_MALE; + .distance = 2; + end; +} diff --git a/npc/008-2-2/ledmitz.txt b/npc/008-2-2/ledmitz.txt new file mode 100644 index 00000000..5939428e --- /dev/null +++ b/npc/008-2-2/ledmitz.txt @@ -0,0 +1,55 @@ +// Evol scripts. +// Author: +// gumi + +008-2-2,43,34,0 script Ledd NPC_DRINKER_ROAMINGO,{ + // XXX: ^ I know it should be Led and Mitz but 4144 made names + // shorter than 4 characters illegal + + deltimer("Mitz::OnTalk"); + addtimer(rand(500, 900), "Mitz::OnTalk"); +OnTalk: + npctalk3(l("Ha! I'll drink muuuch mo.. more than you! Im not ooone biiit dr...dr..unk!")); + // TODO: add more sentences + // XXX: maybe instead of making them respond to a click they should just + // shout at each other at regular intervals? + end; + +OnInit: + .sex = G_MALE; + .distance = 3; + +////////// UNFINISHED ////////// +//////////////////////////////// +// REMOVE THIS CODE WHEN THIS // +// NPC IS NO LONGER A WIP ////// +//////////////////////////////// +//if (!debug) disablenpc(.name$); +///////// UNFINISHED /////////// + + end; +} + +008-2-2,46,34,0 script Mitz NPC_DRINKER_MICKSHA,{ + + deltimer("Ledd::OnTalk"); + addtimer(rand(500, 900), "Ledd::OnTalk"); +OnTalk: + npctalk3(l("I can still drink more! Better give up you... you... teelotaler! MORE BEER MELINDA!")); + // TODO: add more sentences + end; + +OnInit: + .sex = G_MALE; + .distance = 3; + +////////// UNFINISHED ////////// +//////////////////////////////// +// REMOVE THIS CODE WHEN THIS // +// NPC IS NO LONGER A WIP ////// +//////////////////////////////// +//if (!debug) disablenpc(.name$); +///////// UNFINISHED /////////// + + end; +} diff --git a/npc/008-2-2/melania.txt b/npc/008-2-2/melania.txt new file mode 100644 index 00000000..52efda05 --- /dev/null +++ b/npc/008-2-2/melania.txt @@ -0,0 +1,21 @@ +// Evol scripts. +// Author: +// Micksha +// Description: +// Receptionist of Rusty Pick. +// THIS IS A PLACEHOLDER! + +008-2-2,28,27,0 script Melania NPC_AIRLIA,{ + speech + l("Hello Sir."), + l("Welcome to the Rusty Pick. Sorry, we have no room left today."), + l("One advice: Don't take the things those drinkers say too serious. They are sitting here and drinking all day."), + l("I wish you a beautiful day."); + + close; + +OnInit: + .sex = G_FEMALE; + .distance = 2; + end; +} diff --git a/npc/008-2-2/melinda.txt b/npc/008-2-2/melinda.txt new file mode 100644 index 00000000..a418b4e2 --- /dev/null +++ b/npc/008-2-2/melinda.txt @@ -0,0 +1,172 @@ + +// Evol scripts. +// Authors: +// Toams +// Description: +// Melinda, Rusty Pick's waitress + +008-2-2,40,29,0 script Melinda#008-2-2 NPC_MELINDA,1,1,{ + +function StartConversation { + + .@tick = gettimetick(1); + if (.@tick > @Hurns_Rusty_Pick_WaitressTick + 10) + { + setarray .messages$[0], l("Welcome to our inn!"), + l("Welcome to the Rusty Pick."), + l("Please, have a seat."), + l("Lovely day, isn't it?"); + + .@r = rand(getarraysize(.messages$)); + .@msg$ = .messages$[.@r]; + npctalk3 .@msg$; + @Hurns_Rusty_Pick_WaitressTick = .@tick; + } + } + +mes ""; +mesn; +mesq l("Hi, sweetie! Want a fresh beer for 90 Florin?"); +switch (select(l("Sure! [Don't tip]"), + l("Sure! [Tip 5 Florin]"), + l("Sure! [Tip 10 Florin]"), + l("Nah, maybe later."))) +{ + case 1: + if (Zeny < 90) + goto L_NoMoney; + getinventorylist; + if (@inventorylist_count == 100 && countitem("Beer") == 0) + goto L_TooMany; + set Zeny, Zeny - 90; + getitem Beer, 1; + mes ""; + mesn; + mesq l("Pff... Nickel nurser!"); + goto L_Close; + case 2: + if (Zeny < 95) + goto L_NoMoney; + getinventorylist; + if (@inventorylist_count == 100 && countitem("Beer") == 0) + goto L_TooMany; + set Zeny, Zeny - 95; + getitem "Beer", 1; + mes ""; + mesn; + mesq l("Thanks for the tip!"); + goto L_Close; + case 3: + if (Zeny < 100) + goto L_NoMoney; + getinventorylist; + if (@inventorylist_count == 100 && countitem("Beer") == 0) + goto L_TooMany; + set Zeny, Zeny - 100; + getitem "Beer", 1; + mes ""; + mesn; + mesq l("Thank you, sweetie! Want to hear a secret?"); + switch (select(l("What is it, darling?"), + l("Nah, I don't feel like chatting."))) + { + case 1: + mes ""; + mesn; + mesq l("The master bowyer in this village used to construct exceptional bows. When you want one you should go and ask him."); + goto L_Close; + case 2: + goto L_No; + } + goto L_Close; + case 4: + goto L_No; +} + +L_NoMoney: + mes ""; + mesn; + mesq l("You look broke. Don't think that you can dine and dash here!"); + goto L_Close; + +L_No: + mes ""; + mesn; + mesq l("Just call me when you changed your mind."); + goto L_Close; + +L_Close: + initnpctimer; + close; + +L_TooMany: + mes ""; + mesn; + mesq l("You don't have room for a beer!"); + goto L_Close; + +OnTimer1000: + dographmovestep; + +OnTouch: + StartConversation; + end; + +OnInit: + .sex = G_FEMALE; + .distance = 5; + .speed = 300; + initmovegraph "startspot", 40, 29, + "barkeeper", 43, 30, + "kfahr_r", 45, 36, + "kfahr_l", 43, 35, + "l_table_b", 36, 36, + "l_table_r", 38, 33, + "m_table_l", 39, 33, + "m_table_b", 41, 36, + "r_table_r", 46, 33, + "fireplace", 36, 28, + "firewood", 33, 28, + "to_basement", 52, 32, + "basement_entrance", 24, 25, + "basement_cabinet", 30,31, + "cabinet", 42, 28, + "bucket", 46, 30; + + + + setmovegraphcmd "startspot", "firewood", 1, "dir 4; wait 5", + "firewood", "fireplace", 1, "dir 4; wait 3", + "fireplace", "startspot", 1, "dir 0; wait 10", + + "startspot", "l_table_b", 1, "dir 4; wait 3", + "l_table_b", "l_table_r", 1, "dir 2; wait 3", + "l_table_r", "m_table_l", 1, "dir 6; wait 3", + "m_table_l", "m_table_b", 1, "dir 4; wait 3", + "m_table_b", "r_table_r", 1, "dir 2; wait 3", + "r_table_r", "bucket", 1, "dir 4; wait 1; emote 1;" + "wait 15; moveon", + "bucket", "startspot", 1, "dir 0; wait 5", + + "startspot", "kfahr_r", 2, "dir 4; wait 5", + "kfahr_r", "barkeeper", 1, "dir 4; wait 1;" + "say Another round for kfahr's table.;" + "wait 1; say They sure are thirsty today;" + "wait 5; moveon", + "barkeeper", "kfahr_l", 1, "dir 6; wait 3;" + "say Cheers!;" + "wait 3; moveon", + "kfahr_l", "startspot", 1, "dir 0; wait 10", + + "startspot", "to_basement", 1, "dir 4; warp 008-2-5 basement_entrance", + "basement_entrance", "basement_cabinet", 1, "dir 4; wait 5", + "basement_cabinet", "basement_entrance", 1, "dir 4; warp 008-2-2 to_basement", + "to_basement", "cabinet", 1, "dir 4; wait 5", + "cabinet", "startspot", 1, "dir 0; wait 15"; + + + + + firstmove "wait 8"; + initnpctimer; +} diff --git a/npc/008-2-2/note.txt b/npc/008-2-2/note.txt new file mode 100644 index 00000000..2fcce90f --- /dev/null +++ b/npc/008-2-2/note.txt @@ -0,0 +1,28 @@ +// Evol scripts. +// Author: +// gumi + +008-2-2,32,28,0 script Note#Hurnscald:pub NPC_PAPER_NOTE,{ + narrator(8, + l("We refuse service to anyone who:"), + l("• Has a bubblehead"), + l("• Is not properly shaded"), + l("• Can't walk without stopping after every step")); + + // In case you don't get the joke, know that it's a parody on Illutia. + + close; + +OnInit: + .distance = 3; + +////////// UNFINISHED ////////// +//////////////////////////////// +// REMOVE THIS CODE WHEN THIS // +// NPC IS NO LONGER A WIP ////// +//////////////////////////////// +//if (!debug) disablenpc(.name$); +///////// UNFINISHED /////////// + + end; +} diff --git a/npc/008-2-2/shop.txt b/npc/008-2-2/shop.txt new file mode 100644 index 00000000..861843f7 --- /dev/null +++ b/npc/008-2-2/shop.txt @@ -0,0 +1,45 @@ +// Evol scripts. +// Authors: +// 4144 +// Reid +// Description: +// Inn hidden shop. + +008-2-2,40,30,0 trader #Invisible008-2-2 NPC_HIDDEN,{ + +OnInit: + tradertype(NST_MARKET); + + sellitem Beer, -1, 50; + sellitem Bread, -1, 50; + sellitem RedPlushWine, -1, 50; + sellitem Cheese, -1, 50; + sellitem CherryCake, -1, 50; + sellitem SmallHealing, -1, 50; + + .sex = G_OTHER; + .distance = 10; + end; + +OnClock0000: + restoreshopitem Beer, 20; + restoreshopitem Bread, 20; + restoreshopitem RedPlushWine, 20; + restoreshopitem Cheese, 20; + restoreshopitem CherryCake, 20; + restoreshopitem SmallHealing, 20; +OnClock0800: + restoreshopitem Beer, 20; + restoreshopitem Bread, 20; + restoreshopitem RedPlushWine, 20; + restoreshopitem Cheese, 20; + restoreshopitem CherryCake, 20; + restoreshopitem SmallHealing, 20; +OnClock1600: + restoreshopitem Beer, 20; + restoreshopitem Bread, 20; + restoreshopitem RedPlushWine, 20; + restoreshopitem Cheese, 20; + restoreshopitem CherryCake, 20; + restoreshopitem SmallHealing, 20; +} diff --git a/npc/008-2-21/_warps.txt b/npc/008-2-21/_warps.txt index 90e3be7f..5dd0f6f5 100644 --- a/npc/008-2-21/_warps.txt +++ b/npc/008-2-21/_warps.txt @@ -1,4 +1,4 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Map 008-2-21: Forsaken Inn Basement warps -008-2-21,34,27,0 warp #008-2-21_34_26 1,0,008-2-20,35,36 +008-2-21,34,26,0 warp #008-2-21_34_26 1,0,008-2-20,35,36 008-2-21,22,43,0 warp #008-2-21_22_43 0,0,008-1,252,212 diff --git a/npc/008-2-24/_import.txt b/npc/008-2-24/_import.txt index e8f862f4..63cfe25c 100644 --- a/npc/008-2-24/_import.txt +++ b/npc/008-2-24/_import.txt @@ -1,3 +1,4 @@ // Map 008-2-24: Dimond's Cove Ground Floor // This file is generated automatically. All manually added changes will be removed when running the Converter. "npc/008-2-24/_warps.txt", +"npc/008-2-24/troupe-leader.txt", diff --git a/npc/008-2-24/troupe-leader.txt b/npc/008-2-24/troupe-leader.txt new file mode 100644 index 00000000..8b10fed8 --- /dev/null +++ b/npc/008-2-24/troupe-leader.txt @@ -0,0 +1,119 @@ +// Evol scripts. +// Author: +// gumi +// Quest states: +// [1] 0 - cannot do the quest +// [1] 1 - can do the quest +// [1] 2 - talked to inspector (1) <= start +// [1] 3 - talked to old woman (1) +// [1] 4 - talked to old woman (2) +// [1] 5 - talked to inspector (2) +// [1] 6 - talked to troupe leader (1) +// [1] 7 - talked to inspector (3) +// [1] 8 - talked to old man +// [1] 9 - talked to old woman (3) +// [1] 10 - talked to inspector (4) +// [1] 11 - talked to old woman (4) +// [1] 12 - talked to malek +// [1] 13 - searched the bookcase +// [1] 14 - talked to inspector (5) +// [1] 15 - talked to troupe leader (2) <= reward +// [1] 16 - talked to inspector (6) <= reward, end +// [2] unused +// [3] unused +// [t] unused +// Description: +// robberies in hurnscald + +008-2-24,41,39,0 script Troupe Leader NPC_DIMOND,{ + + function nohmask_question { + // XXX: shouldn't the player ask a question before she replies Yes? this feels too abrupt + speech(4, + l("Yes, a mask was stolen from us the last night we were in Hurnscald.")); + + selectd( + l("Any ideas on who might have taken it?"), + l("Are you sure one of your troupe members didn't hide it and commit those robberies?"), + l("Hmm...")); + + switch (@menu) + { + case 1: + speech( + l("Hm..."), + l("I did see an old man hang out near the theater after our last show.")); + close2; + setq(.quest_inspector, 6); + close; + + case 2: + speech( + l("I am absolutely positive."), + l("None of my troupe have left the city since we got here."), + l("Good day!")); + close; + } + + closeclientdialog(); + close; + } + + function nohmask_found { + // XXX: shouldn't the player say "I found your mask" before the npc says thanks? + speech(4, + l("Thank you for finding the mask."), + l("You did such a good job, you should keep it.")); + + if (checkweight(.reward_item, 1) != true) + { + speech(8, + l("It seems you can't carry it right now...")); + close; + } + + setq(.quest_inspector, 15); + getexp(.reward_exp, 0); + getitem(.reward_item, 1); + + speech( + l("We don't need it anymore."), + l("We're doing different shows here.")); + close; + } + + // OnTalk: + switch (getq(.quest_inspector)) + { + case 5: nohmask_question; break; + // XXX: shouldn't it have an in-between state where it says good luck or something? + case 14: nohmask_found; break; + // XXX: shouldn't it have a "completed" state where it says thanks, come back any time? + } + + // initial intro + speech( + l("Hello."), + l("I'm the leader of a traveling theater troupe."), + l("We'll be staying here in Tulimshar for a while.")); + close; + +OnInit: + .reward_item = NohMask; // FIXME: change this when we get NohMask + .reward_exp = 1500; + + .quest_inspector = HurnscaldQuests_Inspector; + .quest_debug = .quest_inspector; + .sex = G_FEMALE; + .distance = 3; + +////////// UNFINISHED ////////// +//////////////////////////////// +// REMOVE THIS CODE WHEN THIS // +// NPC IS NO LONGER A WIP ////// +//////////////////////////////// +//if (!debug) disablenpc(.name$); +///////// UNFINISHED /////////// + + end; +} diff --git a/npc/008-2-4/_import.txt b/npc/008-2-4/_import.txt index 8ab4d742..826aa135 100644 --- a/npc/008-2-4/_import.txt +++ b/npc/008-2-4/_import.txt @@ -2,4 +2,6 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. "npc/008-2-4/_savepoints.txt", "npc/008-2-4/_warps.txt", +"npc/008-2-4/bernard.txt", "npc/008-2-4/mapflags.txt", +"npc/008-2-4/olana.txt", diff --git a/npc/008-2-4/bernard.txt b/npc/008-2-4/bernard.txt new file mode 100644 index 00000000..a528bcc3 --- /dev/null +++ b/npc/008-2-4/bernard.txt @@ -0,0 +1,230 @@ +// Evol scripts. +// Author: +// gumi +// Quest states: +// [1] 0 - cannot do the quest +// [1] 1 - can do the quest +// [1] 2 - bernard wants roasted maggot +// [1] 3 - brought maggot +// [1] 4 - bernard wants maggot slime +// [1] 5 - brought maggot slime +// [1] 6 - mikhail needs maggot slime +// [1] 7 - brought maggot slime +// [2] unused +// [3] unused +// [t] unused +// Description: +// Bernard wants to make a maggot slime soup + +008-2-4,34,29,0 script Bernard NPC_BERNARD,{ + + if (BaseLevel < .min_level) + { + npctalk3 generic(16 | 32); + end; + } + + function soup_intro { + if (rand(2) == 1) + { + speech 4, + l("The fields are crawling with maggots."), + l("Where is Mikhail?"), + l("What is taking them so long?"), + l("Could I ask a favor of you?"); + } + else + { + speech 4, + l("The taste of maggots in soup is... unforgettable."), + l("They taste simply divine!"), + l("I sent someone to kill me some maggots and they have yet to return."), + l("Would you help me kill some?"); + } + + if (selectd(l("Yes."), l("No.")) == 2) + { + return; + } + + if (rand(2) == 1) + { + speech 4, + l("Great!"), + l("I need a %s for my soup.", getitemlink(.first_item)); + } + else + { + speech 4, + l("Bring me a %s.", getitemlink(.first_item)), + l("I'll give you something if you do."); + } + + speech 8, + l("Please bring it to me!"); + + setq .quest, 2; + close; + } + + function soup_reminder_roasted { + speech + l("Oh, please hurry and bring me a %s.", getitemlink(.first_item)), + l("I'm yearning for maggot soup!"); + close; + } + + function soup_no_room { + speech 1 | 8, + "...", + l("It seems you don't have room for my reward."), + l("I'll wait until you do."); + close; + } + + function soup_reward_roasted { + speech 4, + l("Oooh, perfect! It's perfect!"), + l("You brought me my %s!", getitemlink(.first_item)), + l("Here, have some %s for your troubles.", + getitemlink(.first_reward_item)); + + if (checkweight(.first_reward_item, .first_reward_amount) != true) + soup_no_room; + + if (countitem(.first_item) < 1) + close; + + delitem .first_item, 1; + getitem .first_reward_item, .first_reward_amount; + getexp .first_reward_exp, 0; + setq .quest, 3; + + speech 8, + l("Now let's see..."); + close; + } + + function soup_ask_slime { + speech + l("Thank you so much!"), + l("But... something is missing to make the soup creamy."), + l("I need %d %s for that.", + .second_item_qty, getitemlink(.second_item)), + l("Bring them to me, and I'll give you something nice."); + + setq .quest, 4; + close; + } + + function soup_reminder_slime { + speech + l("Please do hurry and bring me %d %s, so I can finish my soup!", + .second_item_qty, getitemlink(.second_item)); + close; + } + + function soup_reward_slime { + speech + l("Nice!"), + l("They're perfect, just perfect!"), + l("You brought me the %d %s!", + .second_item_qty, getitemlink(.second_item)), + l("Here, have some %s as reward.", + getitemlink(.second_reward_item)); + + if (checkweight(.second_reward_item, .second_reward_amount) != true) + soup_no_room; + + if (countitem(.second_item) < .second_item_qty) + close; + + delitem .second_item, .second_item_qty; + getitem .second_reward_item, .second_reward_amount; + getexp .second_reward_exp, 0; + setq .quest, 5; + + close; + } + + function soup_thanks_slime { + speech + l("I didn't mention it before, but I also put beer in my soup."), + l("I hope you like beer as much as I do, because, you see..."), + l("Beer is life!"); + close; + } + + function soup_thanks_mikhail { + speech + l("My help, Mikhail, finally returned with the slimes I needed."), + l("I wonder what took him so long?"); + close; + } + + + // OnTalk: + switch (getq(.quest)) + { + case 0: + case 1: soup_intro; break; + case 2: + if (countitem(.first_item) < 1) + soup_reminder_roasted; + else + soup_reward_roasted; + break; + case 3: soup_ask_slime; break; + case 4: + if (countitem(.second_item) < .second_item_qty) + soup_reminder_slime; + else + soup_reward_slime; + break; + case 5: + case 6: soup_thanks_slime; break; + default: soup_thanks_mikhail; + } + + closeclientdialog(); + close; + +OnPCLoginEvent: +OnPCBaseLvUpEvent: + if (BaseLevel >= .min_level && getq(.quest) < 1) + { + setq .quest, 1; // allow the player to do the quest + dispbottom l("New quest available: %s (level %d+)", + getquestlink(.quest), .min_level); // XXX: requires new manaplus versions, maybe show a different message for old versions? + } + end; + +OnInit: + .min_level = 10; // min level to do the quest + + .first_item = RoastedMaggot; + .first_reward_item = CherryCake; + .first_reward_amount = 5; + .first_reward_exp = 100; + + .second_item = MaggotSlime; + .second_item_qty = 3; + .second_reward_item = Beer; + .second_reward_amount = 3; + .second_reward_exp = 100; + + .quest = HurnscaldQuests_Soup; + .quest_debug = .quest; + .sex = G_MALE; + .distance = 3; + +////////// UNFINISHED ////////// +//////////////////////////////// +// REMOVE THIS CODE WHEN THIS // +// NPC IS NO LONGER A WIP ////// +//////////////////////////////// +//if (!debug) disablenpc(.name$); +///////// UNFINISHED /////////// + + end; +} diff --git a/npc/008-2-4/olana.txt b/npc/008-2-4/olana.txt new file mode 100644 index 00000000..c16e8887 --- /dev/null +++ b/npc/008-2-4/olana.txt @@ -0,0 +1,21 @@ +// Evol scripts. +// Author: +// Micksha +// Description: +// Olana, the old woman who is looking for her daughter Rossy. +// THIS IS A PLACEHOLDER! + +008-2-4,30,28,0 script Olana#008-2-4 NPC_OLANA,{ + speech + l("Oh, a traveller. Welcome."), + l("Did you see my daughter Rossy, by chance?"), + l("She wasn't at home for two days now. I worry about her!"), + lg("If you see her, please tell her to come home."); + + close; + +OnInit: + .sex = G_MALE; + .distance = 2; + end; +} diff --git a/npc/008-2-6/_import.txt b/npc/008-2-6/_import.txt index 4630df43..38c19068 100644 --- a/npc/008-2-6/_import.txt +++ b/npc/008-2-6/_import.txt @@ -1,4 +1,6 @@ // Map 008-2-6: Two Guys One Bed // This file is generated automatically. All manually added changes will be removed when running the Converter. "npc/008-2-6/_warps.txt", +"npc/008-2-6/alan.txt", +"npc/008-2-6/donald.txt", "npc/008-2-6/mapflags.txt", diff --git a/npc/008-2-6/alan.txt b/npc/008-2-6/alan.txt new file mode 100644 index 00000000..35d75437 --- /dev/null +++ b/npc/008-2-6/alan.txt @@ -0,0 +1,303 @@ +// Evol scripts. +// Author: +// Micksha +// Description: +// Alan the bow-maker. + +008-2-6,31,26,0 script Alan NPC_YOUNG_MAN_KFAHR,{ + + function bow_intro { + speech(4, + l("When you want to buy something then please speak to my apprentice."), + l("I am only doing special requests.")); + + selectd( + l("OK, thanks."), + rif(BaseLevel >= .min_level, l("Can you make me a really good bow?")), + rif(getq(.quest_inspector) == 2, l("Have you seen anything strange recently that might be connected to the robberies?"))); + + switch (@menu) + { + case 1: closeclientdialog(); close; + case 3: speech(l("No.")); close; + } + + speech(4, + l("You mean like one of my legendary forest bows?")); + + selectd( + l("Yes, that would be nice.")); + + speech(4, + l("Sorry, I am not making these anymore.")); + + selectd( + l("Oh, too bad."), + l("What? Why not?")); + + if (@menu == 1) { + closeclientdialog(); + close; + } + + speech(4, + l("The problem is that I am short of material."), + l("My forestbows are not made of regular wood, you know."), + l("They are made of special living wood."), + l("And only the best logs of living wood are good enough for them."), + l("I used to get these logs from Jack, the handsome lumberjack."), + l("But the last time I asked him for a new delivery he said that he would never again get any for me.")); + + selectd( + l("Too bad."), + l("Did you ask him why?")); + + if (@menu == 1) { + closeclientdialog(); + close; + } + + speech(4, + l("Sure I did."), + l("But he just told me to leave him alone."), + l("Maybe you could ask him what's wrong?")); + + selectd( + l("OK, I'll ask him."), + l("I am sure he got his reasons.")); + + setq(.quest_bow, 2); + closeclientdialog(); + close; + } + + function bow_reminder { + if (getq(.quest_inspector) == 2) + { + speech(4, + l("Did you already ask Jack why he won't deliver me any more living wood?")); + + selectd( + l("Have you seen anything strange recently that might be connected to the robberies?")); + + speech(l("No.")); + close; + } + + npctalk3(l("Did you already ask Jack why he won't deliver me any more living wood?")); + end; + } + + function bow_explain { + speech(4, + l("Did you already ask Jack why he won't deliver me any more living wood?")); + + selectd( + l("Yes, I did. He said that the trees turned into dangerous monsters."), + rif(getq(.quest_inspector) == 2, l("Have you seen anything strange recently that might be connected to the robberies?"))); + + if (@menu != 1) + { + speech(l("No.")); + close; + } + + speech( + l("Oh, that's really bad news."), + l("Maybe you can do his job?"), + l("If you kill some of these tree monsters and bring me their wood I could take a look at them."), + l("Maybe you will find a piece of wood that is strong enough to become one of my forest bows.")); + + close2; + setq(.quest_bow, 4); + end; + } + + function bow_make { + speech(4, + l("I can make you a really nice forest bow out of this."), + l("I just need %s E for material and work time.", + format_number(.req_esp))); + + selectd( + l("%s??? What a ripoff!", format_number(.req_esp)), + rif(Zeny >= .req_esp, l("Sure, here you go!")), + rif(getq(.quest_inspector) == 2, l("Have you seen anything strange recently that might be connected to the robberies?"))); + + switch (@menu) + { + case 1: speech(l("Fine, I'll just hold on to this log should you ever change your mind.")); close; + case 3: speech(l("No.")); close; + } + + // XXX: maybe here we could make the player wait real-world hours for Alan to finish? + + if (checkweight(.reward_item, 1) != true) + { + speech( + l("It seems you can't carry the bow right now."), + l("Go clean up your inventory and come back.")); + close; + } + + if (Zeny < .req_esp) + close; // double-check + + setq(.quest_bow, 6); + Zeny -= .req_esp; + getitem(.reward_item, 1); + getexp(.reward_exp, 0); + + speech( + l("Here you go - have fun with it.")); + close; + } + + function bow_check_wood { + speech(4, + l("How is the hunt going?"), + l("Did you bring me any wood?")); + + selectd( + l("No, sorry."), + rif(countitem(.req_item) >= 1, l("Here, take a look!")), + rif(getq(.quest_inspector) == 2, l("Have you seen anything strange recently that might be connected to the robberies?"))); + + switch (@menu) + { + case 1: closeclientdialog(); close; + case 3: speech(l("No.")); close; + } + + .@first = true; + + do { + if (countitem(.req_item) < 1) + break; + + if (.@first == false) + { + narrator(4, + l("You hand him another log.")); + } + + delitem(.req_item, 1); + .@first = false; + + speech(4, + l("Hmmm... looks ok, but is it strong enough?")); + + narrator(4, + l("Alan bends the log over his knee.")); + + if (rand(.success_rate) == 0) + { + narrator(4 | 8, + l("Alan tries as hard as he can but the log won't bend.")); + + speech(4, + l("Aaah!"), + l("Yes!"), + l("That is a really fine piece of wood you brought me."), + l("It will make an excellent bow!")); + + setq(.quest_bow, 5); + setq(.quest_shield, 1); + + narrator(4, + l("He proceeds to further scrutinize the log.")); + + bow_make; + end; + } + + narrator(4 | 8, + l("The log breaks with a loud crack.")); + + speech(4, + l("Sorry, this log was too weak for one of my forest bows."), + l("Now it is junk."), + l("Do you wish to try again?")); + + selectd( + l("Sure, here you go."), + l("Hey! Stop breaking my stuff!")); + + if (@menu != 1) { + closeclientdialog(); + close; + } + + } while (true); + + speech(l("It seems you have no wood left.")); + close; + } + + function bow_done { + speech(4, + l("I hope you are satisfied with your forest bow."), + l("It is one of my best works.")); + + selectd( + l("I am!"), + rif(getq(.quest_inspector) == 2, l("Have you seen anything strange recently that might be connected to the robberies?"))); + + switch (@menu) + { + case 2: speech(l("No.")); close; + default: closeclientdialog(); close; + } + } + + // OnTalk: + switch (getq(.quest_bow)) + { + case 0: + case 1: bow_intro; break; + case 2: bow_reminder; break; + case 3: bow_explain; break; + case 4: bow_check_wood; break; + case 5: bow_make; break; + default: bow_done; break; + } + + closeclientdialog(); + close; + +OnPCLoginEvent: +OnPCBaseLvUpEvent: + if (BaseLevel >= .min_level && getq(.quest_bow) < 1) + { + setq(.quest_bow, 1); // allow the player to do the quest + dispbottom(l("New quest available: %s (level %d+)", + getquestlink(.quest_bow), .min_level)); // XXX: requires new manaplus versions, maybe show a different message for old versions? + } + end; + +OnInit: + .min_level = 25; // min level to do the quest + + .req_item = RawLog; // item required to make the bow + .req_esp = 10000; // amount of Esperin required to make the bow + .reward_item = ForestBow; // quest reward (item) + .reward_exp = 500; // quest reward (exp) + .success_rate = 20; // one in X chances to get a perfect log + + .quest_bow = HurnscaldQuests_ForestBow; + .quest_shield = HurnscaldQuests_WoodenShield; + .quest_inspector = HurnscaldQuests_Inspector; + .quest_debug = .quest_bow; + .sex = G_MALE; + .distance = 3; + +////////// UNFINISHED ////////// +//////////////////////////////// +// REMOVE THIS CODE WHEN THIS // +// NPC IS NO LONGER A WIP ////// +//////////////////////////////// +//if (!debug) disablenpc(.name$); +///////// UNFINISHED /////////// + + end; +} diff --git a/npc/008-2-6/donald.txt b/npc/008-2-6/donald.txt new file mode 100644 index 00000000..2b3a72f3 --- /dev/null +++ b/npc/008-2-6/donald.txt @@ -0,0 +1,20 @@ +// Evol scripts. +// Author: +// Micksha +// Description: +// Alan's Apprentice. +// THIS IS A PLACEHOLDER! + +008-2-6,29,27,0 script Donald NPC_YOUNG_MAN_APPRENTICE,{ + speech + l("Hi Sir."), + l("Sorry, we are sold out for today."), + lg("Come back later."); + + close; + +OnInit: + .sex = G_MALE; + .distance = 2; + end; +} diff --git a/npc/008-2-7/_import.txt b/npc/008-2-7/_import.txt index 263e5dcf..4cb38df9 100644 --- a/npc/008-2-7/_import.txt +++ b/npc/008-2-7/_import.txt @@ -3,3 +3,4 @@ "npc/008-2-7/_savepoints.txt", "npc/008-2-7/_warps.txt", "npc/008-2-7/mapflags.txt", +"npc/008-2-7/wyara.txt", diff --git a/npc/008-2-7/wyara.txt b/npc/008-2-7/wyara.txt new file mode 100644 index 00000000..a875544a --- /dev/null +++ b/npc/008-2-7/wyara.txt @@ -0,0 +1,20 @@ +// Evol scripts. +// Author: +// Micksha +// Description: +// Wyara the witch. +// THIS IS A PLACEHOLDER! + +008-2-7,27,28,0 script Wyara#008-2-7 NPC_DARK_DRUID,{ + speech + l("What? Is there someone?"), + l("Please, leave me alone. I have to pixel potions."), + lg("I will sell some when you return a bit later."); + + close; + +OnInit: + .sex = G_FEMALE; + .distance = 2; + end; +} diff --git a/npc/008-2-8/_import.txt b/npc/008-2-8/_import.txt index d3346591..8bb44bb1 100644 --- a/npc/008-2-8/_import.txt +++ b/npc/008-2-8/_import.txt @@ -1,4 +1,6 @@ // Map 008-2-8: Hurnscald Forge // This file is generated automatically. All manually added changes will be removed when running the Converter. "npc/008-2-8/_warps.txt", +"npc/008-2-8/macgowan.txt", "npc/008-2-8/mapflags.txt", +"npc/008-2-8/nicholas.txt", diff --git a/npc/008-2-8/macgowan.txt b/npc/008-2-8/macgowan.txt new file mode 100644 index 00000000..efeee33e --- /dev/null +++ b/npc/008-2-8/macgowan.txt @@ -0,0 +1,24 @@ +// Evol scripts. +// Author: +// Micksha +// Description: +// The Smith's apprentice. +// THIS IS A PLACEHOLDER! + +008-2-8,38,29,0 script Macgowan NPC_YOUNG_MAN_APPRENTICE,{ + npctalk3(l("Hello, I am Macgowan, apprentice to Nicholas.")); + end; + +OnInit: + .distance = 3; + +////////// UNFINISHED ////////// +//////////////////////////////// +// REMOVE THIS CODE WHEN THIS // +// NPC IS NO LONGER A WIP ////// +//////////////////////////////// +//if (!debug) disablenpc(.name$); +///////// UNFINISHED /////////// + + end; +} diff --git a/npc/008-2-8/nicholas.txt b/npc/008-2-8/nicholas.txt new file mode 100644 index 00000000..7b62090d --- /dev/null +++ b/npc/008-2-8/nicholas.txt @@ -0,0 +1,28 @@ +// Evol scripts. +// Author: +// gumi, Micksha +// Description: +// Nicholas the Smith. + +008-2-8,40,27,0 script Nicholas NPC_NICHOLAS,{ + speech( + l("Hello, there!"), + l("I'm an expert blacksmith."), + l("If you get me some Coal and Iron Ingots, I could make you a very valuable shield or helmet.")); + + // TODO: setzer quest + close; + +OnInit: + .distance = 3; + +////////// UNFINISHED ////////// +//////////////////////////////// +// REMOVE THIS CODE WHEN THIS // +// NPC IS NO LONGER A WIP ////// +//////////////////////////////// +//if (!debug) disablenpc(.name$); +///////// UNFINISHED /////////// + + end; +} diff --git a/npc/008-3-0/_import.txt b/npc/008-3-0/_import.txt new file mode 100644 index 00000000..11ecbf2d --- /dev/null +++ b/npc/008-3-0/_import.txt @@ -0,0 +1,4 @@ +// Map 008-3-0: Rossy Cave +// This file is generated automatically. All manually added changes will be removed when running the Converter. +"npc/008-3-0/_mobs.txt", +"npc/008-3-0/_warps.txt", diff --git a/npc/008-3-0/_mobs.txt b/npc/008-3-0/_mobs.txt new file mode 100644 index 00000000..f7062926 --- /dev/null +++ b/npc/008-3-0/_mobs.txt @@ -0,0 +1,22 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Map 008-3-0: Rossy Cave mobs +008-3-0,83,62,21,7 monster Cave Maggot 1027,5,500,2000 +008-3-0,101,117,13,7 monster Cave Maggot 1027,5,500,2000 +008-3-0,79,144,10,6 monster Cave Maggot 1027,7,500,2000 +008-3-0,158,87,10,12 monster Cave Maggot 1027,7,500,2000 +008-3-0,34,28,3,4 monster Poison Skull 1100,1,35000,60000 +008-3-0,160,124,5,3 monster Ratto 1005,4,35000,15000 +008-3-0,155,163,1,7 monster Ratto 1005,4,35000,15000 +008-3-0,128,146,5,3 monster Ratto 1005,4,35000,15000 +008-3-0,120,61,5,3 monster Ratto 1005,4,35000,15000 +008-3-0,138,64,10,7 monster Crafty 1018,10,1000,120000 +008-3-0,130,103,9,6 monster Crafty 1018,6,1000,120000 +008-3-0,67,114,10,2 monster Spider 1044,3,4000,8000 +008-3-0,109,145,4,10 monster Spider 1044,5,4000,8000 +008-3-0,68,84,3,7 monster Spider 1044,4,4000,8000 +008-3-0,83,166,0,0 monster Ruby Vein 1051,1,600000,60000 +008-3-0,80,169,0,0 monster Diamond Vein 1045,1,600000,60000 +008-3-0,89,168,0,0 monster Emerald Vein 1052,1,600000,60000 +008-3-0,100,180,0,0 monster Topaz Vein 1054,1,600000,60000 +008-3-0,97,176,0,0 monster Sapphire Vein 1053,1,600000,60000 +008-3-0,94,180,0,0 monster Amethyst Vein 1055,1,600000,60000 diff --git a/npc/008-3-0/_warps.txt b/npc/008-3-0/_warps.txt new file mode 100644 index 00000000..7426d274 --- /dev/null +++ b/npc/008-3-0/_warps.txt @@ -0,0 +1,3 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Map 008-3-0: Rossy Cave warps +008-3-0,130,113,0 warp #008-3-0_130_113 1,0,008-1-1,202,48 diff --git a/npc/_anchors.txt b/npc/_anchors.txt index 3630ba7e..1ca080cb 100644 --- a/npc/_anchors.txt +++ b/npc/_anchors.txt @@ -16,9 +16,11 @@ OnInit: htput(.ht, "^HARB|^MASTER", "001-2-16 28 32"); htput(.ht, "^HOLD$", "000-2-2 42 31"); htput(.ht, "^HURN", "008-1 250 109"); + htput(.ht, "^LAVA", "008-3-0 35 28"); htput(.ht, "^LEG", "001-2-33 34 42"); htput(.ht, "^LIB", "001-2-4 42 35"); htput(.ht, "^LIGHT", "001-2-0 37 32"); + htput(.ht, "^LUVIA", "008-1 256 206"); htput(.ht, "^MERCH|^BANK", "001-2-19 28 30"); htput(.ht, "^MOON", "001-2-2 40 34"); htput(.ht, "^NARD", "000-2-3 21 28"); @@ -28,10 +30,12 @@ OnInit: htput(.ht, "^NOBLE4$", "001-2-12 34 32"); htput(.ht, "^NOBLE5$", "001-2-15 34 38"); htput(.ht, "^RED|PLUSH|^INN", "001-2-28 30 35"); + htput(.ht, "^ROSSY", "008-3-0 130 108"); htput(.ht, "^SECOND|^DECK2$", "000-2-1 67 32"); htput(.ht, "^SHIP2$", "001-2-21 23 28"); htput(.ht, "^START2$", "000-0-0 26 28"); htput(.ht, "^START3$", "000-0-1 26 28"); htput(.ht, "^START|^BEGIN", "000-0 22 24"); + htput(.ht, "^VEIN", "008-3-0 85 172"); htput(.ht, "^WARE", "001-2-18 37 31"); } diff --git a/npc/_import.txt b/npc/_import.txt index ff79ccb8..fe81168d 100644 --- a/npc/_import.txt +++ b/npc/_import.txt @@ -88,6 +88,7 @@ @include "npc/008-2-7/_import.txt" @include "npc/008-2-8/_import.txt" @include "npc/008-2-9/_import.txt" +@include "npc/008-3-0/_import.txt" @include "npc/008-3-1/_import.txt" @include "npc/test/_import.txt" @include "npc/testbg/_import.txt" diff --git a/npc/commands/debug-quest.txt b/npc/commands/debug-quest.txt index 2c590a2d..468e5af2 100644 --- a/npc/commands/debug-quest.txt +++ b/npc/commands/debug-quest.txt @@ -90,6 +90,31 @@ function script GlobalQuestDebug { } while (1); } + function qDebugHurnscald { + do + { + clear; + setnpcdialogtitle l("Quest debug") + " - Hurnscald"; + mes l("This menu gives access to quest debug menus for @@ quests.", "Hurnscald"); + next; + mes l("Please select a quest:"); + + menuint + menuimage("actions/back", l("Go back")), -1, + "Hinnak", HurnscaldQuests_Hinnak, + l("Maggot soup"), HurnscaldQuests_Soup, + l("Inspector"), HurnscaldQuests_Inspector, + l("Forest bow"), HurnscaldQuests_ForestBow, + l("Wooden shield"), HurnscaldQuests_WoodenShield; + + switch (@menuret) + { + case -1: return; + default: callfunc "QuestDebug" + @menuret; + } + } while (1); + } + function qDebugGeneral { do { @@ -125,6 +150,7 @@ function script GlobalQuestDebug { select l("Prologue"), "Artis", + "Hurnscald", l("Other"), rif(getarg(0,0), menuimage("actions/back", l("Return to Debug menu"))); @@ -132,8 +158,9 @@ function script GlobalQuestDebug { { case 1: qDebugShip; break; case 2: qDebugArtis; break; - case 3: qDebugGeneral; break; - case 4: return; + case 3: qDebugHurnscald; break; + case 4: qDebugGeneral; break; + case 5: return; } } while (1); } diff --git a/npc/functions/fishing.txt b/npc/functions/fishing.txt index f1782f3e..dcf4ac02 100644 --- a/npc/functions/fishing.txt +++ b/npc/functions/fishing.txt @@ -183,7 +183,7 @@ function script fishing { .@fish_id = relative_array_random(getvariableofnpc(.fish_ids[0], .@npc$)); // RNG to obtain a fish - if (rand(gettimetick(0) - @fishing_tick) <= .@pull_rand_max + (100 * @FISHING_BOOSTER[getnpcid(0)])) + if (rand(gettimetick(0) - @fishing_tick) <= .@pull_rand_max + (100 * @FISHING_BOOSTER[getnpcid()])) { specialeffect(.@success_fx, SELF, playerattached()); // event success @@ -244,7 +244,7 @@ function script fishing { if (getvariableofnpc(.bait_ids[.@i], .@npc$) == .@bait) { .@bait_c = true; - @FISHING_BOOSTER[getnpcid(0)] = getvariableofnpc(.bait_ids[.@i + 1], .@npc$); + @FISHING_BOOSTER[getnpcid()] = getvariableofnpc(.bait_ids[.@i + 1], .@npc$); break; } } diff --git a/npc/functions/generic-text.txt b/npc/functions/generic-text.txt new file mode 100644 index 00000000..ede6e954 --- /dev/null +++ b/npc/functions/generic-text.txt @@ -0,0 +1,120 @@ +// Evol functions. +// Authors: +// gumi +// Description: +// text register + +function script generic { + .@flags = getarg(0, 1); + + .@villager = (1 << 0); + .@old = (1 << 1); + .@kid = (1 << 2); + .@sailor = (1 << 3); + .@busy = (1 << 4); + .@tired = (1 << 5); + .@angry = (1 << 6); + .@legion = (1 << 7); + .@crazy = (1 << 8); + + if (.@flags == 0) + return l("I'm sorry, I can't talk right now."); + + if (.@flags & .@villager) + { + setarray(.@array$[.@count], + l("It is a sunny day, don't you think?"), + l("I just want to live my life in peace."), + l("Isn't this place pretty? I love hanging out here!")); + + .@count += 3; + } + + if (.@flags & .@old) + { + setarray(.@array$[.@count], + l("Come closer dear, I can't hear you."), + l("Hmm... where did I put it again?"), + l("I miss the good old days.")); + + .@count += 3; + } + + if (.@flags & .@kid) + { + setarray(.@array$[.@count], + l("Mommy doesn't want me to talk to strangers.")); + + .@count += 1; + } + + if (.@flags & .@sailor) + { + setarray(.@array$[.@count], + l("So finally someone has came to visit me?"), + l("A-hoy matey!")); + + .@count += 2; + } + + if (.@flags & .@busy) + { + setarray(.@array$[.@count], + l("Can't talk right now."), + l("Can't you see I'm busy?"), + l("Come back later."), + l("I'm a little busy right now.")); + + .@count += 4; + } + + if (.@flags & .@tired) + { + setarray(.@array$[.@count], + l("I had a long day, come back tomorrow."), + l("I need to rest."), + l("*snores*")); + + .@count += 3; + } + + if (.@flags & .@angry) + { + setarray(.@array$[.@count], + l("Go pester someone else."), + l("I don't feel like talking to you."), + l("Stop wasting my time."), + l("Go fly a kite"), + l("Not in the mood to chat."), + l("Give me some space."), + l("Can you please go away?")); + + .@count += 7; + } + + if (.@flags & .@legion) + { + setarray(.@array$[.@count], + l("My breath smells bad."), + l("Don't distract me, I have to stay alert."), + l("Can't talk right now, I'm on patrol duty."), + l("I can't stay here and talk all day. I have a job to do."), + l("Keep moving."), + l("So you think you're tough? A warrior must also be loyal and patient."), + l("Practice! There are no secrets to becoming a warrior."), + l("There is no honor in fighting a weak opponent.")); + + .@count += 8; + } + + if (.@flags & .@crazy) + { + setarray(.@array$[.@count], + l("Do I look like a tree? I feel like one."), + l("What're you looking at?!")); + + .@count += 2; + } + + return .@array$[rand(.@count)]; +} diff --git a/npc/functions/main.txt b/npc/functions/main.txt index 97c34702..b620be0c 100644 --- a/npc/functions/main.txt +++ b/npc/functions/main.txt @@ -183,9 +183,9 @@ function script npctalkonce { set(getvariableofnpc(.talk_lock, strnpcinfo(NPC_NAME_UNIQUE)), gettimetick(2) + getarg(1, 1)); break; default: - if (gettimetick(2) <= @NPC_TALK_LOCK[getnpcid(0)]) + if (gettimetick(2) <= @NPC_TALK_LOCK[getnpcid()]) return false; - @NPC_TALK_LOCK[getnpcid(0)] = gettimetick(2) + getarg(1, 1); + @NPC_TALK_LOCK[getnpcid()] = gettimetick(2) + getarg(1, 1); } // talk mechanism diff --git a/npc/functions/npcmove.txt b/npc/functions/npcmove.txt index eb6acded..612ab036 100644 --- a/npc/functions/npcmove.txt +++ b/npc/functions/npcmove.txt @@ -47,7 +47,7 @@ function script domoveaction { } else if (.@cmd$ == "emote") { - unitemote getnpcid(0), getvariableofnpc(.movepathx[.@pos], strnpcinfo(3)); + unitemote getnpcid(), getvariableofnpc(.movepathx[.@pos], strnpcinfo(3)); return 2; } else if (.@cmd$ == "class") diff --git a/npc/functions/npcmovegraph.txt b/npc/functions/npcmovegraph.txt index b26f9a16..d03f15c5 100644 --- a/npc/functions/npcmovegraph.txt +++ b/npc/functions/npcmovegraph.txt @@ -115,7 +115,7 @@ function script execmovecmd { } else if (.@cmd$[0] == "emote") { - unitemote getnpcid(0), atoi(.@cmd$[1]); + unitemote getnpcid(), atoi(.@cmd$[1]); } else if (.@cmd$[0] == "class") { @@ -137,7 +137,7 @@ function script execmovecmd { .@x = getvariableofnpc(.movepos_x1[.@pos], strnpcinfo(3)); .@y = getvariableofnpc(.movepos_y1[.@pos], strnpcinfo(3)); if (getstrlen(.@map$) > 0) - unitwarp getnpcid(0), .@map$, .@x, .@y; + unitwarp getnpcid(), .@map$, .@x, .@y; else movenpc strnpcinfo(3), .@x, .@y; set getvariableofnpc(.movepos, strnpcinfo(3)), .@pos; diff --git a/npc/functions/quest-debug/036-HurnscaldQuests_Hinnak.txt b/npc/functions/quest-debug/036-HurnscaldQuests_Hinnak.txt new file mode 100644 index 00000000..61dc294e --- /dev/null +++ b/npc/functions/quest-debug/036-HurnscaldQuests_Hinnak.txt @@ -0,0 +1,32 @@ +// Hinnak quest debug +// Author: +// gumi + +function script QuestDebug36 { + do + { + clear; + setnpcdialogtitle l("Quest debug"); + mes "HurnscaldQuests_Hinnak"; + mes "---"; + mes l("Quest state: @@, @@", + getq(HurnscaldQuests_Hinnak), + getq2(HurnscaldQuests_Hinnak)); + next; + + GenericQuestDebug HurnscaldQuests_Hinnak, + l("Cannot do the quest"), 0, + l("Can do the quest"), 1, + l("Hinnak asked for help"), 2, + l("Helped Hinnak"), 3; + + switch (@menuret) + { + case 0: + case 1: + case 2: setq HurnscaldQuests_Hinnak, getq(HurnscaldQuests_Hinnak), 0; break; + default: if (@menuret < 0) return; + } + + } while (1); +} diff --git a/npc/functions/quest-debug/037-HurnscaldQuests_Soup.txt b/npc/functions/quest-debug/037-HurnscaldQuests_Soup.txt new file mode 100644 index 00000000..43eba0d6 --- /dev/null +++ b/npc/functions/quest-debug/037-HurnscaldQuests_Soup.txt @@ -0,0 +1,32 @@ +// Mikhail & Bernard quest debug +// Author: +// gumi + +function script QuestDebug37 { + do + { + clear; + setnpcdialogtitle l("Quest debug"); + mes "HurnscaldQuests_Soup"; + mes "---"; + mes l("Quest state: @@", + getq(HurnscaldQuests_Soup)); + next; + + GenericQuestDebug HurnscaldQuests_Soup, + l("Cannot do the quest"), 0, + l("Can do the quest"), 1, + l("Bernard wants roasted maggot"), 2, + l("brought maggot"), 3, + l("Bernard wants maggot slime"), 4, + l("brought maggot slime"), 5, + l("Mikhail needs maggot slime"), 6, + l("brought maggot slime"), 7; + + if (@menuret < 0) + { + return; + } + + } while (1); +} diff --git a/npc/functions/quest-debug/038-HurnscaldQuests_Inspector.txt b/npc/functions/quest-debug/038-HurnscaldQuests_Inspector.txt new file mode 100644 index 00000000..053f085e --- /dev/null +++ b/npc/functions/quest-debug/038-HurnscaldQuests_Inspector.txt @@ -0,0 +1,41 @@ +// Inspector quest debug +// Author: +// gumi + +function script QuestDebug38 { + do + { + clear; + setnpcdialogtitle l("Quest debug"); + mes "HurnscaldQuests_Inspector"; + mes "---"; + mes l("Quest state: @@", + getq(HurnscaldQuests_Inspector)); + next; + + GenericQuestDebug HurnscaldQuests_Inspector, + l("Cannot do the quest"), 0, + l("Can do the quest"), 1, + l("Talked to Inspector (1)"), 2, + l("Talked to Old Woman (1)"), 3, + l("Talked to Old Woman (2)"), 4, + l("Talked to Inspector (2)"), 5, + l("Talked to Troupe Leader (1)"), 6, + l("Talked to Inspector (3)"), 7, + l("Talked to Old Man"), 8, + l("Talked to Old Woman (3)"), 9, + l("Talked to Inspector (4)"), 10, + l("Talked to Old Woman (4)"), 11, + l("Talked to Malek"), 12, + l("Searched the bookcase"), 13, + l("Talked to Inspector (5)"), 14, + l("Talked to Troupe Leader (2)"), 15, + l("Talked to Inspector (6)"), 16; + + if (@menuret < 0) + { + return; + } + + } while (1); +} diff --git a/npc/functions/quest-debug/039-HurnscaldQuests_ForestBow.txt b/npc/functions/quest-debug/039-HurnscaldQuests_ForestBow.txt new file mode 100644 index 00000000..c6a61a1b --- /dev/null +++ b/npc/functions/quest-debug/039-HurnscaldQuests_ForestBow.txt @@ -0,0 +1,42 @@ +// Jack Lumber quest debug +// Author: +// gumi + +function script QuestDebug39 { + do + { + clear; + setnpcdialogtitle l("Quest debug"); + mes "HurnscaldQuests_ForestBow"; + mes "---"; + mes l("Quest state: @@", getq(HurnscaldQuests_ForestBow)); + mes "---"; + mes l("Related quests:"); + mes "HurnscaldQuests_WoodenShield: " + getq(HurnscaldQuests_WoodenShield); + next; + + GenericQuestDebug HurnscaldQuests_ForestBow, + menuimage("actions/manage", l("Debug Wooden Shield")), -1, + l("Cannot do the quest"), 0, + l("Can do the quest"), 1, + l("Alan wants to ask Jack"), 2, + l("Jack explained problem"), 3, + l("Alan asks to find wood"), 4, + l("Found perfect wood"), 5, + l("Got the bow"), 6; + + switch (@menuret) + { + case -1: callfunc "QuestDebug40"; break; + case 0: + case 1: + case 2: + case 3: + case 4: setq(HurnscaldQuests_WoodenShield, 0); break; + case 5: + case 6: setq(HurnscaldQuests_WoodenShield, max(1, getq(HurnscaldQuests_WoodenShield))); break; + default: if (@menuret < 0) return; + } + + } while (1); +} diff --git a/npc/functions/quest-debug/040-HurnscaldQuests_WoodenShield.txt b/npc/functions/quest-debug/040-HurnscaldQuests_WoodenShield.txt new file mode 100644 index 00000000..05d08130 --- /dev/null +++ b/npc/functions/quest-debug/040-HurnscaldQuests_WoodenShield.txt @@ -0,0 +1,37 @@ +// Jack Lumber quest debug +// Author: +// gumi + +function script QuestDebug40 { + do + { + clear; + setnpcdialogtitle l("Quest debug"); + mes "HurnscaldQuests_WoodenShield"; + mes "---"; + mes l("Quest state: @@", getq(HurnscaldQuests_WoodenShield)); + mes "---"; + mes l("Related quests:"); + mes "HurnscaldQuests_ForestBow: " + getq(HurnscaldQuests_ForestBow); + next; + + GenericQuestDebug HurnscaldQuests_WoodenShield, + menuimage("actions/manage", l("Debug Forest Bow")), -1, + l("Cannot do the quest"), 0, + l("Can do the quest"), 1, + l("Jack proposes shield"), 2, + l("Accepted the quest"), 3, + l("Got the shield"), 4; + + switch (@menuret) + { + case -1: callfunc "QuestDebug39"; break; + case 1: + case 2: + case 3: + case 4: setq(HurnscaldQuests_ForestBow, max(5, getq(HurnscaldQuests_ForestBow))); break; + default: if (@menuret < 0) return; + } + + } while (1); +} diff --git a/npc/scripts.conf b/npc/scripts.conf index 3bb929a9..91d5b218 100644 --- a/npc/scripts.conf +++ b/npc/scripts.conf @@ -39,6 +39,7 @@ "npc/functions/npcmovegraph.txt", "npc/functions/fishing.txt", "npc/functions/mouboofunc.txt", +"npc/functions/generic-text.txt", "npc/functions/asklanguage.txt", "npc/functions/game-rules.txt", "npc/functions/riddle.txt", @@ -56,6 +57,7 @@ "npc/functions/quest-debug/005-ShipQuests_Knife.txt", "npc/functions/quest-debug/006-ShipQuests_ArpanMoney.txt", "npc/functions/quest-debug/007-ShipQuests_Door.txt", +// 008: ??? "npc/functions/quest-debug/009-ShipQuests_TreasureChest.txt", "npc/functions/quest-debug/010-ShipQuests_Ale.txt", "npc/functions/quest-debug/011-ShipQuests_Astapolos.txt", @@ -71,8 +73,8 @@ "npc/functions/quest-debug/021-ArtisQuests_CatchPiou.txt", "npc/functions/quest-debug/022-ArtisQuests_Fishman.txt", "npc/functions/quest-debug/023-ArtisQuests_QOnan.txt", -// 24: quest removed (Halloween_VisitArtis) -// 25: quest removed (Halloween_BarrelQuest) +// 024: removed quest (Halloween_VisitArtis) +// 025: removed quest (Halloween_BarrelQuest) "npc/functions/quest-debug/026-General_Rumly.txt", "npc/functions/quest-debug/027-ArtisQuests_Enora.txt", "npc/functions/quest-debug/028-General_Narrator.txt", @@ -81,6 +83,13 @@ "npc/functions/quest-debug/031-General_Janus.txt", "npc/functions/quest-debug/032-ArtisQuests_MonaDad.txt", "npc/functions/quest-debug/033-Artis_Legion_Progress.txt", +// 034: ??? +// 035: ??? +"npc/functions/quest-debug/036-HurnscaldQuests_Hinnak.txt", +"npc/functions/quest-debug/037-HurnscaldQuests_Soup.txt", +"npc/functions/quest-debug/038-HurnscaldQuests_Inspector.txt", +"npc/functions/quest-debug/039-HurnscaldQuests_ForestBow.txt", +"npc/functions/quest-debug/040-HurnscaldQuests_WoodenShield.txt", // Item functions "npc/items/croconut.txt", @@ -106,5 +115,10 @@ // config script "npc/config/hairstyle_config.txt", +// placeholder scripts +//"npc/placeholder/angus.txt", +//"npc/placeholder/caul.txt", +//"npc/placeholder/receptionist.txt", + // Maps specific scripts @include "npc/_import.txt" diff --git a/npc/test/npc1.txt b/npc/test/npc1.txt index f6777f48..38a03142 100644 --- a/npc/test/npc1.txt +++ b/npc/test/npc1.txt @@ -625,15 +625,15 @@ L_Start: setunitdata(.@npcId, UDT_HAIRCOLOR, 17); break; case 2: - .@npcId = getnpcid(0, "npc4"); + .@npcId = getnpcid("npc4"); setunitdata(.@npcId, UDT_HAIRSTYLE, 0); break; case 3: - .@npcId = getnpcid(0, "npc4"); + .@npcId = getnpcid("npc4"); setunitdata(.@npcId, UDT_HEADTOP, 1301); break; case 4: - .@npcId = getnpcid(0, "npc4"); + .@npcId = getnpcid("npc4"); setunitdata(.@npcId, UDT_HEADTOP, 0); break; case 5: |