summaryrefslogtreecommitdiff
path: root/npc/config/inspector.txt
blob: ca7576aa0a6fb7fd13a6b0679d59790a0dcd42ec (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
// TMW2/LOF Script.
// Author:
//	Jesusalva
// Description:
//  Inspector Quest core

// Main logical loop, takes no argument
function	script	inspectorQuest	{
	.@npc$ = strnpcinfo(0);
	if ($@GM_OVERRIDE) debugmes .@npc$;
	// TODO: Rather than using .@q == 1
	// Check with compare(getmap(), "017") && .@q == 1
	// Then  with compare(getmap(), "012") && .@q == 2
	// Then  with compare(getmap(), "009") && .@q == 3
	// ...So on, for each stage
	.@q = getq(LoFQuest_Inspector);
	if (.@q != 1) return;
	select
		l("Talk normally."),
		l("Ask about the robberies.");
	if (@menu == 1) {
		clear;
		return;
	}
	/*
	// NPC List (24+6 = 30 NPCs)
	///////////////////////////////
	Royal Fairy
		Equip collector
	Erik
		Homunculus dispatcher
	Kenton
		Public affairs officer
	Guard#lof-{1:6}
		Six guards in the land of fire
	Elen The Traveler
		Traveler shop & lore
	Milocat
		Barber
	Pydisgner#spoints
		Legacy LoF account converter, sitting at main square
	Paxel
		Prsm's son
	Pet Detective
		Ace Ventura does feed a lot of pets...
	Chef#dimond
		The chef, and likely the principal victim
	Dimond
		Dimond's Cove owner
	Phil
		Trumpet at Dimond Cove Troupe
	Jerry
		...the drummer
	Robert
		...Harpist
	Shannon
		Cart rent, likely the CEO of a transport company
	Basil
		Quartermaster at Dimond's Cove
	Gambler#017-3
		Gambler at Dimond's Cove
	Doug
		Just a guest at Dimond's Cove
	Lora Tay
		Seamstress at Dimond's Cove
	Nico Goethe
		Card player, guest at Dimond's Cove
	Jenny
		Worker? Thief? at Dimond's Cove
	Zack
		Same as Jenny
	Pihro
		One of the administrators of LoF. Makes ammo
	Pyndragon
		One of the administrators of LoF. Makes rare equip
	Axzell the Alchemist
		LoF alchemist
	*/
	mes "";
	.@q2 = getq2(LoFQuest_Inspector);
	.@THIEF_DESCRIPTION =   1; // Know how thief looked alike
	.@CHEESE_TYPES	  =   2; // Know which kind of cheese was stolen
	.@TIME_OF_THEFT	 =   4; // Know the time the theft happened
	.@VICTIM_CHEF	   =   8; // Talked to Dimond Cove chef
	.@VICTIM_LAB		=  16; // Alchemist explained about cheese thieves
	.@UNDERGROUND_PASS  =  32; // Know the route used in Dimond
	.@RAT_RULEOUT	   =  64; // Ruled out the possibility of rats
	.@PORTAL_USE		= 128; // Concluded the Portal was used by thief
	.@TROUPE_DISGUISE   = 256; // Learned about thief run-in with musics (no noise)
	.@SCRATCH_EVIDENCE  = 512; // Learned about the scratch marks left by thief
	// Each NPC sets exactly ONE piece of evidence to true, or none
	// Some NPCs require some pieces to already be set in advance
	// Technically, Dimond Chef can set two pieces - one on first talk, 2nd locked
	// Some NPCs set the same piece of evidence - you don't need to talk to all
	if (.@npc$ == "Doug") {
		// Knows nothing, saw nothing
		mesn;
		mesq l("I know nothing about the robberies, sorry.");
		next;
		mesn;
		mesq l("Besides, this room is too dark, so I wouldn't be able to see anything.");
	} else if (.@npc$ == "Royal Fairy") {
		// Knows nothing, saw nothing
		mesn;
		mesq l("I know nothing about the robberies, sorry.");
		next;
		mesn;
		mesq l("There haven't been anything unusual in the fairy district of the Land of Fire Village, after all.");
	} else if (.@npc$ == "Erik") {
		// Points toward Pet Dectective if CHEESE_TYPES
		if (.@q2 & .@CHEESE_TYPES) {
			mesn;
			mesq l("Hmm, based on these cheese types... Definitely either a person, or a pet.");
			next;
			mesn;
			mesq l("Try asking Ace Ventura, the Pet Detective. He'll be able to trim further the list.");
		} else {
			mesn;
			mesq l("I know nothing about the robberies, sorry.");
		}
	} else if (.@npc$ == "Kenton") {
		// FIXME Acquire SCRATCH_EVIDENCE FIXME
		mesn;
		mesq l("I know nothing about the robberies, sorry.");
	} else if (compare(.@npc$, "Guard")) {
		// List some excluded NPCs. Could use miller rand to be predictable but...
		mesn;
		mesq l("I know nothing about the robberies, sorry.");
		next;
		.@n1$ = any(l("Doctor"), l("Boring NPC"), l("Nowhere family"), l("Drowned Man"), l("Billy"), l("Drueme"), l("Stranger"), l("Fortiun"), l("Fusus"), l("Nahrec"), l("Silversmith"));
		.@n2$ = any(l("Doctor"), l("Boring NPC"), l("Nowhere family"), l("Drowned Man"), l("Billy"), l("Drueme"), l("Stranger"), l("Fortiun"), l("Fusus"), l("Nahrec"), l("Silversmith"));
		.@n3$ = any(l("Doctor"), l("Boring NPC"), l("Nowhere family"), l("Drowned Man"), l("Billy"), l("Drueme"), l("Stranger"), l("Fortiun"), l("Fusus"), l("Nahrec"), l("Silversmith"));
		mesn;
		mesq l("But don't waste your breath with %s... %s, if I haven't mentioned... did I mention %s already? Anyway, they definitely cannot help.", .@n1$, .@n2$, .@n3$);
	} else if (.@npc$ == "Elen The Traveler") {
		// Actually useful hint, but only if you are reading the code, so no effect
		mesn;
		mesq l("I know nothing about the robberies, sorry.");
		next;
		mesn;
		mesq l("But if it helps, it should take under 15 minutes to reach Tulimshar on foot from here for most animals, via Halinarzo's Canyon.");
		next;
		mesn;
		mesq l("Reaching Nivalis instead, would likely take considerably longer.");
	} else if (.@npc$ == "Milocat") {
		// Points toward Axzell
		mesn;
		mesq l("No idea. Paxel would at least know a few tricks, and Axzell the Alchemist could speak more about cheese thieves.");
	} else if (.@npc$ == "Pydisgner#spoints") {
		// FIXME Acquire PORTAL_USE if THIEF_DESCRIPTION and TIME_OF_THEFT FIXME
		mesn;
		mesq l("I've been here all day and night. And a lot of people use this portal, unless you have a description of what I'm looking for, and the time, I can't help.");
	} else if (.@npc$ == "Paxel") {
		// General hints from Prsm - have you talked to Chef? And to Dimond?
		mesn;
		mesq l("I know nothing about the robberies, sorry.");
		next;
		mesn;
		mesq l("But my father, Prsm, always told me to check multiple times with the victim and the boss. I guess in your case it would be...");
		next;
		mesn;
		mesq l("Dimond's Chef and Dimond herself. So if you're stuck, try talking to them again, confirm the details?");
	} else if (.@npc$ == "Pet Detective") {
		// Acquire RAT_RULEOUT if CHEESE_TYPES
		if (.@q2 & .@CHEESE_TYPES) {
			mesn;
			mesq l("Hmm, based on these cheese types... Definitely either a person, or a pet.");
			next;
			mesn;
			mesq l("We can rule out rats, though. I know, shocking, right? But these kind of cheese are eaten by cats, dragons and yetis, but not by rats.");
			next;
			mesn;
			mesq l("I would limit the search for persons, cats, dragons or yetis. Keep in mind these aren't the primary food for any of them, so you're unlikely to find them in a pile of stolen cheese.");
			setq2 LoFQuest_Inspector, .@q2 | .@RAT_RULEOUT;
		} else {
			mesn;
			mesq l("I know nothing about the robberies, sorry.");
		}
		mesn;
		mesq l("I know nothing about the robberies, sorry.");
	} else if (.@npc$ == "Chef#dimond") {
		// FIXME Acquire VICTIM_CHEF, acquire CHEESE_TYPES if VICTIM_LAB FIXME
		mesn;
		mesq l("I know nothing about the robberies, sorry.");
	} else if (.@npc$ == "Dimond") {
		// FIXME Acquire THIEF_DESCRIPTION if TIME_OF_THEFT FIXME
		mesn;
		mesq l("I know nothing about the robberies, sorry.");
	} else if (.@npc$ == "Phil") {
		// FIXME Acquire TROUPE_DISGUISE if VICTIM_CHEF FIXME
		mesn;
		mesq l("I know nothing about the robberies, sorry.");
	} else if (.@npc$ == "Jerry") {
		// FIXME Acquire TROUPE_DISGUISE if VICTIM_CHEF FIXME
		mesn;
		mesq l("I know nothing about the robberies, sorry.");
	} else if (.@npc$ == "Robert") {
		// FIXME Acquire TROUPE_DISGUISE if VICTIM_CHEF FIXME
		mesn;
		mesq l("I know nothing about the robberies, sorry.");
	} else if (.@npc$ == "Shannon") {
		// FIXME Acquire UNDERGROUND_PASS if VICTIM_CHEF FIXME
		mesn;
		mesq l("I know nothing about the robberies, sorry.");
	} else if (.@npc$ == "Basil") {
		// Guides about Zack requisites
		mesn;
		mesq l("I know nothing about the robberies, but I might help if you brief me on the issue.");
		next;
		mesn;
		mesq l("I see, I believe the workers at the basement might know something, but they likely don't know they know.");
		next;
		mesn;
		mesq l("If you limit your suspects, they might cooperate... But talk to them in order, or they might be too scared to spill the beans. Talk to them once, twice, if you want to be sure.");
	} else if (.@npc$ == "Gambler#017-3") {
		// Guides about Lora and Nico requisites
		mesn;
		mesq l("I know nothing about the robberies. But Lora Tay spends most of the time awake and Nico Goethe is always running through the whole Inn searching for someone to play with. Both are very sharp when it comes to time and noises, even if aloof to what they don't care about.");
		next;
		mesn;
		mesq l("If you learn enough to jog their memories, they might know the time of the theft. If they don't, then I don't think anyone will.");
	} else if (.@npc$ == "Lora Tay") {
		// Acquire TIME_OF_THEFT if UNDERGROUND_PASS
		if (.@q2 & .@UNDERGROUND_PASS) {
			mesn;
			mesq l("Hm? You mean when someone made a ruckus with metallic noise on the underground basement?");
			next;
			mesn;
			mesq l("Of course, it was maybe 20:00, give or take ten minutes. Every day. It is incredibly annoying.");
			setq2 LoFQuest_Inspector, .@q2 | .@TIME_OF_THEFT;
		} else {
			mesn;
			mesq l("I know nothing about the robberies, sorry.");
			next;
			mesn;
			mesq l("Now get out of my way, what I'm sewing is clearly more important than whatever you're playing. Kids, these days...!");
		}
	} else if (.@npc$ == "Nico Goethe") {
		// Acquire TIME_OF_THEFT if UNDERGROUND_PASS
		if (.@q2 & .@UNDERGROUND_PASS) {
			mesn;
			mesq l("Hm? You mean when someone made a ruckus with metallic noise on the underground basement?");
			next;
			mesn;
			mesq l("Of course, it was maybe 20:00, give or take ten minutes. Every day. It is incredibly annoying.");
			setq2 LoFQuest_Inspector, .@q2 | .@TIME_OF_THEFT;
		} else {
			mesn;
			mesq l("I know nothing about the robberies, sorry.");
			next;
			mesn;
			mesq l("Now, unless you're interested in a match of Arcmage, I've heard Basil had some free time, so I'll ask him instead.");
		}
	} else if (.@npc$ == "Jenny") {
		// Acquire THIEF_DESCRIPTION if UNDERGROUND_PASS
		mesn;
		mesq l("You want to know if I saw something going through here?");
		next;
		if (.@q2 & .@UNDERGROUND_PASS) {
			mesn;
			mesq l("And not a rat? Not really... No, wait, I did. Multiple times, something relatively big, which came in as if they were liquid.");
			next;
			mesn;
			mesq l("Here, I'll write down how it seemed. Some sort of grey fluff with a gold ball or something? But it clearly wasn't human, and it came *with* gold, so why would I be worried it could be a thief?");
			setq2 LoFQuest_Inspector, .@q2 | .@THIEF_DESCRIPTION;
		} else {
			mesn;
			mesq l("Well... Rats, maybe?");
			// Basil's instructions, slightly less obscure this time
			if (.@q2 & .@RAT_RULEOUT) {
				mesc l("%s glances over to %s, before turning to you with a shrug.", l("Jenny"), l("Zack"));
			}
		}
	} else if (.@npc$ == "Zack") {
		// Acquire UNDERGROUND_PASS if RAT_RULEOUT
		if (.@q2 & .@RAT_RULEOUT) {
			mesn;
			mesq l("You want to know if something could pass through the tunnel we're digging?");
			next;
			mesn;
			mesq l("Well, if you look behind the building, there's a couple chimneys on ground and a hole which connects here. Would make some metallic noise to go through either of them.");
			next;
			mesn;
			mesq l("I imagine something sufficiently small or nimble, or maybe liquid, could pass through it to reach the kitchen's depot.");
			setq2 LoFQuest_Inspector, .@q2 | .@UNDERGROUND_PASS;
		} else {
			mesn;
			mesq l("I don't know what you're talking, I've been working all day.");
		}
	} else if (.@npc$ == "Pihro") {
		// Send to Dimond's Cove chef
		mesn;
		mesq l("Ah, so you're the one in charge of the cheese robberies? I believe Dimond's Cove Chef was the most affected one, but I keep myself out of these matters.");
	} else if (.@npc$ == "Pyndragon") {
		// Send to Kenton, the Public Affairs Officer
		mesn;
		mesq l("Ah, so you're the one in charge of the cheese robberies? I wouldn't know anything myself, but try asking Kenton, he is in charge of Public Affairs.");
	} else if (.@npc$ == "Axzell the Alchemist") {
		// Acquire VICTIM_LAB
		mesn;
		mesq l("You want help with your investigation? Well, several creatures eat cheese. Like me. You could try to shorten this list.");
		next;
		mesn;
		mesq l("The trick is figuring out which kind of cheese was stolen. Once you know that, I guess either Ace Ventura or Erik could help you to thin out the list.");
		setq2 LoFQuest_Inspector, .@q2 | .@VICTIM_LAB;
	} else {
		Exception(sprintf("Oops, unhandled NPC at investigation (typo)! %s was not found on stage %d <= report this!", .@npc$, .@q), RB_SPEECH|RB_PLEASEREPORT);
	}
	close;
}