105 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			105 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| /*
 | |
|     Make the patients moan. This is a heartbeat script, placed not on
 | |
|     any of the individual patients, but rather, on some innocuous
 | |
|     placeable object (rug, scorchmark, blood puddle, etc...)
 | |
|     No need to make millions of heartbeat scripts =)
 | |
| 
 | |
|     WWWWolf 2003-11-09
 | |
| */
 | |
| 
 | |
| // Patient tag.
 | |
| const string PATIENT = "Patient";
 | |
| 
 | |
| // NOTE: BROKEN (below code uses a brute-force approach.)
 | |
| // Causes "TOO MANY INSTRUCTIONS" error.
 | |
| int HowManyWithTag(string sTag) {
 | |
|     object obj;
 | |
|     int n = 0;
 | |
| 
 | |
|     do {
 | |
|         obj = GetObjectByTag(sTag,n);
 | |
|     } while (obj != OBJECT_INVALID);
 | |
| 
 | |
|     return n;
 | |
| }
 | |
| 
 | |
| object RandomPatient() {
 | |
|     object x;
 | |
| 
 | |
|     /* // Optimal solution
 | |
|     x = GetObjectByTag(PATIENT, Random(n));
 | |
|     if(x == OBJECT_INVALID)
 | |
|         continue;
 | |
|     */
 | |
|     /* // Brute force but safe solution
 | |
|     int z;
 | |
|     for(z = 0; z < 10; z++) { // 10 tries
 | |
|         x = GetObjectByTag(PATIENT,Random(40));
 | |
|         if(x != OBJECT_INVALID)
 | |
|             break;
 | |
|     }
 | |
|     if(x == OBJECT_INVALID)
 | |
|         continue;
 | |
|     */
 | |
|     // Lightweight brute force solution
 | |
|     x = GetObjectByTag(PATIENT,Random(40));
 | |
| /*    if(x == OBJECT_INVALID)
 | |
|         continue; */
 | |
|     return x;
 | |
| }
 | |
| 
 | |
| string RandomMoaning() {
 | |
|         // Pick a random moaning
 | |
|     switch(d6(1)) {
 | |
|         default:
 | |
|         case 1:
 | |
|             return "Aaaaargh!";
 | |
|             break;
 | |
|         case 2:
 | |
|             return "Oooooh my head!";
 | |
|             break;
 | |
|         case 3:
 | |
|             return "Aaaaargh my legs!";
 | |
|             break;
 | |
|         case 4:
 | |
|             return "Uuuuaaaargh! Ooh!";
 | |
|             break;
 | |
|         case 5:
 | |
|             return "Ooooaaaargh!";
 | |
|             break;
 | |
|         case 6:
 | |
|             return "Make this pain stop, please!";
 | |
|             break;
 | |
|     }
 | |
|     // This is an impossible case. Just here to keep the compiler happy.
 | |
|     return "This moan script sucks and WWWWolf is an idiot! AAAAaaaaAargh!";
 | |
| }
 | |
| 
 | |
| void main()
 | |
| {
 | |
|     object x;
 | |
|     int n;
 | |
|     int a;
 | |
|     string moan;
 | |
| 
 | |
|     // Count the patients.
 | |
|     // n = HowManyWithTag(PATIENT);
 | |
| 
 | |
|     // Let's do 1d4 moaning patients
 | |
|     int nmoans = d4(1);
 | |
|     for(a = 0; a < nmoans; a++) {
 | |
| 
 | |
|         // Get a random patient
 | |
|         x = RandomPatient();
 | |
|         if(x == OBJECT_INVALID)
 | |
|             continue;
 | |
| 
 | |
|         // Pick a random moaning
 | |
|         moan = RandomMoaning();
 | |
| 
 | |
|         // Make the patient moan.
 | |
|         // AssignCommand(x, ActionSpeakString(moan));
 | |
|         AssignCommand(x, SpeakString(moan));
 | |
|     }
 | |
| }
 |