-+-+-+-+-+-+-+-+ START OF PART 70 -+-+-+-+-+-+-+-+ Xput_buffer(' Miscellaneous - RAK & JWT',12,1); Xput_buffer(' V2.0 Town Level & Misc - RAK',13,1); Xput_buffer(' V3.0 Internal Help & Misc - RAK',14,1); Xput_buffer(' V4.0 Source Release Version - RAK',15,1); Xput_buffer(' M4.4 DEC Internal fixes - RHM',16,1); Xput_buffer('Robert Alan Koeneke Jimmey Wayne Todd Jr.',18,1); Xput_buffer('Student/University of Oklahoma Student/University of Oklahoma V',19,1); Xput_buffer('119 Crystal Bend 1912 Tiffany Dr.',20,1); Xput_buffer('Norman, OK 73069 Norman, OK 73071',21,1); Xput_buffer('(405)-321-2925 (405) 360-6792',22,1); X`09pause(24); X`09draw_cave; X end; X X X`09`7B Light up the dungeon`09`09`09`09`09-RAK-`09`7D X`5Bpsect(wizard$code)`5D procedure wizard_light; X var X`09i1,i2,i3,i4`09: integer; X`09flag`09`09: boolean; X begin X if (cave`5Bchar_row,char_col`5D.pl) then X`09flag := false X else X`09flag := true; X for i1 := 1 to cur_height do X`09for i2 := 1 to cur_width do X`09 if (cave`5Bi1,i2`5D.fval in floor_set) then X`09 for i3 := i1-1 to i1+1 do X`09 for i4 := i2-1 to i2+1 do X`09`09with cave`5Bi3,i4`5D do X`09`09 begin X`09`09 pl := flag; X`09`09 if (not(flag)) then X`09`09 fm := false; X`09`09 end; X prt_map; X end; X X X X`09`7B Wizard routine for gaining on stats`09`09`09-RAK-`09`7D X`5Bpsect(wizard$code)`5D procedure change_character; X var X`09tmp_val`09`09`09: integer; X`09tmp_str`09`09`09: vtype; X begin X with py.stat do X`09begin X`09 prt('(3 - 118) Strength = ',1,1); X`09 get_string(tmp_str,1,26,10); X`09 tmp_val := -999; X`09 readv(tmp_str,tmp_val,error:=continue); X`09 if ((tmp_val > 2) and (tmp_val < 119)) then X`09 begin X`09 str := tmp_val; X`09 cstr := tmp_val; X`09 prt_strength; X`09 end; X`09 prt('(3 - 118) Intelligence = ',1,1); X`09 get_string(tmp_str,1,26,10); X`09 tmp_val := -999; X`09 readv(tmp_str,tmp_val,error:=continue); X`09 if ((tmp_val > 2) and (tmp_val < 119)) then X`09 begin X`09 int := tmp_val; X`09 cint := tmp_val; X`09 prt_intelligence; X`09 end; X`09 prt('(3 - 118) Wisdom = ',1,1); X`09 get_string(tmp_str,1,26,10); X`09 tmp_val := -999; X`09 readv(tmp_str,tmp_val,error:=continue); X`09 if ((tmp_val > 2) and (tmp_val < 119)) then X`09 begin X`09 wis := tmp_val; X`09 cwis := tmp_val; X`09 prt_wisdom; X`09 end; X`09 prt('(3 - 118) Dexterity = ',1,1); X`09 get_string(tmp_str,1,26,10); X`09 tmp_val := -999; X`09 readv(tmp_str,tmp_val,error:=continue); X`09 if ((tmp_val > 2) and (tmp_val < 119)) then X`09 begin X`09 dex := tmp_val; X`09 cdex := tmp_val; X`09 prt_dexterity; X`09 end; X`09 prt('(3 - 118) Constitution = ',1,1); X`09 get_string(tmp_str,1,26,10); X`09 tmp_val := -999; X`09 readv(tmp_str,tmp_val,error:=continue); X`09 if ((tmp_val > 2) and (tmp_val < 119)) then X`09 begin X`09 con := tmp_val; X`09 ccon := tmp_val; X`09 prt_constitution; X`09 end; X`09 prt('(3 - 118) Charisma = ',1,1); X`09 get_string(tmp_str,1,26,10); X`09 tmp_val := -999; X`09 readv(tmp_str,tmp_val,error:=continue); X`09 if ((tmp_val > 2) and (tmp_val < 119)) then X`09 begin X`09 chr := tmp_val; X`09 cchr := tmp_val; X`09 prt_charisma; X`09 end; X`09end; X with py.misc do X`09begin X`09 prt('(1 - 32767) Hit points = ',1,1); X`09 get_string(tmp_str,1,26,10); X`09 tmp_val := -1; X`09 readv(tmp_str,tmp_val,error:=continue); X`09 if ((tmp_val > 0) and (tmp_val < 32768)) then X`09 begin X`09 mhp := tmp_val; X`09 chp := tmp_val; X`09 prt_mhp; X`09 prt_chp; X`09 end; X`09 prt('(0 - 32767) Mana = ',1,1); X`09 get_string(tmp_str,1,26,10); X`09 tmp_val := -999; X`09 readv(tmp_str,tmp_val,error:=continue); X`09 if ((tmp_val > -1) and (tmp_val < 32768)) then X`09 begin X`09 mana := tmp_val; X`09 cmana := tmp_val; X`09 prt_cmana; X`09 end; X`09 writev(tmp_str,'Current=',srh:1,' (0-200) Searching = '); X`09 tmp_val := length(tmp_str); X`09 prt(tmp_str,1,1); X`09 get_string(tmp_str,1,tmp_val+1,10); X`09 tmp_val := -999; X`09 readv(tmp_str,tmp_val,error:=continue); X`09 if ((tmp_val > -1) and (tmp_val < 201)) then X`09 srh := tmp_val; X`09 writev(tmp_str,'Current=',stl:1,' (0-10) Stealth = '); X`09 tmp_val := length(tmp_str); X`09 prt(tmp_str,1,1); X`09 get_string(tmp_str,1,tmp_val+1,10); X`09 tmp_val := -999; X`09 readv(tmp_str,tmp_val,error:=continue); X`09 if ((tmp_val > -1) and (tmp_val < 11)) then X`09 stl := tmp_val; X`09 writev(tmp_str,'Current=',disarm:1,' (0-200) Disarming = '); X`09 tmp_val := length(tmp_str); X`09 prt(tmp_str,1,1); X`09 get_string(tmp_str,1,tmp_val+1,10); X`09 tmp_val := -999; X`09 readv(tmp_str,tmp_val,error:=continue); X`09 if ((tmp_val > -1) and (tmp_val < 201)) then X`09 disarm := tmp_val; X`09 writev(tmp_str,'Current=',save:1,' (0-100) Save = '); X`09 tmp_val := length(tmp_str); X`09 prt(tmp_str,1,1); X`09 get_string(tmp_str,1,tmp_val+1,10); X`09 tmp_val := -999; X`09 readv(tmp_str,tmp_val,error:=continue); X`09 if ((tmp_val > -1) and (tmp_val < 201)) then X`09 save := tmp_val; X`09 writev(tmp_str,'Current=',bth:1,' (0-200) Base to hit = '); X`09 tmp_val := length(tmp_str); X`09 prt(tmp_str,1,1); X`09 get_string(tmp_str,1,tmp_val+1,10); X`09 tmp_val := -999; X`09 readv(tmp_str,tmp_val,error:=continue); X`09 if ((tmp_val > -1) and (tmp_val < 201)) then X`09 bth := tmp_val; X`09 writev(tmp_str,'Current=',bthb:1,' (0-200) Bows/Throwing = '); X`09 tmp_val := length(tmp_str); X`09 prt(tmp_str,1,1); X`09 get_string(tmp_str,1,tmp_val+1,10); X`09 tmp_val := -999; X`09 readv(tmp_str,tmp_val,error:=continue); X`09 if ((tmp_val > -1) and (tmp_val < 201)) then X`09 bthb := tmp_val; X`09 writev(tmp_str,'Current=',au:1,' Gold = '); X`09 tmp_val := length(tmp_str); X`09 prt(tmp_str,1,1); X`09 get_string(tmp_str,1,tmp_val+1,10); X`09 tmp_val := -999; X`09 readv(tmp_str,tmp_val,error:=continue); X`09 if (tmp_val > -1) then X`09 begin X`09 au := tmp_val; X`09 prt_gold; X`09 end; X`09end; X erase_line(msg_line,msg_line); X py_bonuses(blank_treasure,0); X end; X X`09`7B Wizard routine for creating objects`09`09`09-RAK-`09`7D X`5Bpsect(wizard$code)`5D procedure wizard_create; X var X`09tmp_val`09`09`09: integer; X`09tmp_str`09`09`09: vtype; X`09flag`09`09`09: boolean; X begin X msg_print('Warning: This routine can cause fatal error.'); X msg_print(' '); X msg_flag := false; X with inventory`5Binven_max`5D do X`09begin X prt('Name : ',1,1); X if (get_string(tmp_str,1,10,40)) then X`09 name := tmp_str X`09 else X`09 name := '& Wizard Object!'; X`09 repeat X`09 prt('Tval : ',1,1); X`09 get_string(tmp_str,1,10,10); X`09 tmp_val := 0; X`09 readv(tmp_str,tmp_val,error:=continue); X`09 flag := true; X`09 case tmp_val of X`09 1,13,15 :`09tchar := '`7E'; X`09 2 :`09tchar := '&'; X`09 10 :`09tchar := '`7B'; X`09 11 :`09tchar := '`7B'; X`09 12 :`09tchar := '`7B'; X`09 20 :`09tchar := '`7D'; X`09 21 :`09tchar := '/'; X`09 22 :`09tchar := '\'; X`09 23 :`09tchar := '`7C'; X`09 25 :`09tchar := '\'; X`09 30 :`09tchar := '`5D'; X`09 31 :`09tchar := '`5D'; X`09 32 :`09tchar := '('; X`09 33 :`09tchar := '`5D'; X`09 34 :`09tchar := ')'; X`09 35 :`09tchar := '`5B'; X`09 36 :`09tchar := '('; X`09 40 :`09tchar := '"'; X`09 45 :`09tchar := '='; X`09 55 :`09tchar := '_'; X`09 60 :`09tchar := '-'; X`09 65 :`09tchar := '-'; X`09 70,71 :`09tchar := '?'; X`09 75,76,77:`09tchar := '!'; X`09 80 :`09tchar := ','; X`09 90 :`09tchar := '?'; X`09 91 :`09tchar := '?'; X`09 otherwise`09flag := false; X`09 end; X`09 until (flag); X`09 tval := tmp_val; X`09 prt('Subval : ',1,1); X`09 get_string(tmp_str,1,10,10); X`09 tmp_val := 1; X`09 readv(tmp_str,tmp_val,error:=continue); X`09 subval := tmp_val; X`09 prt('Weight : ',1,1); X`09 get_string(tmp_str,1,10,10); X`09 tmp_val := 1; X`09 readv(tmp_str,tmp_val,error:=continue); X`09 weight := tmp_val; X`09 prt('Number : ',1,1); X`09 get_string(tmp_str,1,10,10); X`09 tmp_val := 1; X`09 readv(tmp_str,tmp_val,error:=continue); X`09 number := tmp_val; X`09 prt('Damage : ',1,1); X`09 get_string(tmp_str,1,10,5); X`09 damage := tmp_str; X`09 prt('+To hit: ',1,1); X`09 get_string(tmp_str,1,10,10); X`09 tmp_val := 0; X`09 readv(tmp_str,tmp_val,error:=continue); X`09 tohit := tmp_val; X`09 prt('+To dam: ',1,1); X`09 get_string(tmp_str,1,10,10); X`09 tmp_val := 0; X`09 readv(tmp_str,tmp_val,error:=continue); X`09 todam := tmp_val; X`09 prt('AC : ',1,1); X`09 get_string(tmp_str,1,10,10); X`09 tmp_val := 0; X`09 readv(tmp_str,tmp_val,error:=continue); X`09 ac := tmp_val; X`09 prt('+To AC : ',1,1); X`09 get_string(tmp_str,1,10,10); X`09 tmp_val := 0; X`09 readv(tmp_str,tmp_val,error:=continue); X`09 toac := tmp_val; X`09 prt('P1 : ',1,1); X`09 get_string(tmp_str,1,10,10); X`09 tmp_val := 0; X`09 readv(tmp_str,tmp_val,error:=continue); X`09 p1 := tmp_val; X`09 prt('Flags (In HEX): ',1,1); X`09 flags := get_hex_value(1,17,8); X`09 prt('Cost : ',1,1); X`09 get_string(tmp_str,1,10,10); X`09 tmp_val := 0; X`09 readv(tmp_str,tmp_val,error:=continue); X`09 cost := tmp_val; X`09 if (get_com('Allocate? (Y/N)',command)) then X`09 case command of X`09`09'y','Y': begin X`09`09`09 popt(tmp_val); X`09`09`09 t_list`5Btmp_val`5D := inventory`5Binven_max`5D; X`09`09`09 with cave`5Bchar_row,char_col`5D do X`09`09`09 begin X`09`09`09`09if (tptr > 0) then X`09`09`09`09 delete_object(char_row,char_col); X`09`09`09`09tptr := tmp_val; X`09`09`09 end; X`09`09`09 msg_print('Allocated...'); X`09`09`09 end; X`09`09otherwise msg_print('Aborted...'); X`09 end; X`09 inventory`5Binven_max`5D := blank_treasure; X`09end; X end; $ CALL UNPACK [.SOURCE.INCLUDE]WIZARD.INC;1 443525854 $ create 'f' X`09; X`09; Robert Koeneke X`09; September 1, 1984 X`09; MORIA subroutine X`09; Macro function for : X`09; X`09;`09y := bitpos(x) X`09;`09`09Locate first set bit in x and return that position X`09;`09`09in y. X`09;`09`09Clear bit in x. X`09; X`09.title`09BIT_POS`09`09Return location of next bit X`09.ident`09/bit_pos/ X`09.psect misc1$code,pic,con,rel,lcl,shr,exe,rd,nowrt,2 X`09.entry`09bit_pos,`5EM<> X`09ffs`09#0,#32,@4(ap),r0 X`09beql`092$ X`09bbsc`09r0,@4(ap),1$ X1$:`09incl`09r0 X`09ret X2$:`09clrl`09r0 X`09ret X`09.end $ CALL UNPACK [.SOURCE.MACRO]BITPOS.MAR;1 577438945 $ create 'f' X`09; X`09; Programmer:`09RAK`09V4.3 X`09; Macro function for : X`09; X`09;`09dis := distance(y1,x1,y2,x2) X`09; X`09;`09Distance returned is only an approximation based on : X`09; X`09;`09dy = abs(y1-y2) X`09;`09dx = abs(x1-x2) X`09; X`09;`09distance = 2*(dy+dx) - MIN(dy,dx) X`09;`09`09 ---------------------- X`09;`09`09`09 2 X`09; X`09.title`09DISTANCE`09Integer distance between two points X`09.ident`09/distance/ X`09.psect misc1$code,pic,con,rel,lcl,shr,exe,rd,nowrt,2 X`09.entry`09distance,`5EM<> X`09subl3`094(ap),12(ap),r0 X`09bgeq`091$ X`09mnegl`09r0,r0 X1$:`09subl3`098(ap),16(ap),r1 X`09bgeq`092$ X`09mnegl`09r1,r1 X2$:`09cmpl`09r0,r1 X`09bgeq`093$ X`09addl2`09r1,r1 X`09brb`094$ X3$:`09addl2`09r0,r0 X4$:`09addl2`09r1,r0 X`09ashl`09#-1,r0,r0 X`09ret X`09.end $ CALL UNPACK [.SOURCE.MACRO]DISTANCE.MAR;1 1031313756 $ create 'f' X`09.TITLE`09HANDLER - Condition handler for MORIA X`09.PSECT`09HANDLER$DATA`09RD, WRT, PIC, NOSHR, NOEXE, LONG XFAC:`09.ASCID`09/MORIA/ XSTRING:`09.ASCII`09/**Warning: Error Encountered **/<13><10> X`09.ASCII`09/--Attempting to continue game--/<13><10> X`09.ASCII`09/--Suggest you SAVE and restore your character/<13><10> X`09.ASCII`09/Press RETURN to continue: / X`09STRING_LEN = .-STRING XPROMPT:`09.LONG`09STRING_LEN X`09.ADDRESS STRING XRESP:`09.LONG`0910 X`09.ADDRESS BUF XBUF:`09.BLKB`0910 X X`09.PSECT`09MISC1$CODE`09RD, NOWRT, PIC, SHR, LONG, EXE X`09$SSDEF`09`09`09; Define system service values X`09.ENTRY`09OH_NO,`5EM X;+ X;`09Arg list offsets X`09SIG_ARGS = 4`09`09; Signal array X`09MECH_ARGS = 8`09`09; Mechanism array X;- X`09MOVL`09SIG_ARGS(AP), R2`09; Get pointer to signals X`09MOVL`094(R2), R3`09`09; Get condition signalled X`09CMPL`09R3, #SS$_UNWIND`09`09; Unwinding? X`09BEQL`0910$`09`09`09; Yes, just do it X`09$PUTMSG_S`09MSGVEC=@SIG_ARGS(AP),- X`09`09`09FACNAM=FAC X`09PUSHAL`09PROMPT X`09PUSHAL`09BUF X`09CALLS`09#2, G`5ELIB$GET_COMMAND`09;`20 X`09BICL3`09#`5EC<7>, R3, R4`09`09; Extract the severity X`09CMPL`09R4, #4`09`09`09; Is it fatal? X`09BLSS`0910$`09`09`09; Nope, resignal. X`09BICB`09#7, 4(R2)`09`09; Modify the severity to warning X`09$UNWIND_S`09DEPADR=20$`09; Unwind to caller X10$:`09MOVL`09#SS$_RESIGNAL, R0`09; Say to resignal X`09RET X X20$:`09.LONG`091 X`09.END $ CALL UNPACK [.SOURCE.MACRO]HANDLER.MAR;1 1595215826 $ create 'f' X`09;`09Robert Koeneke X`09;`0909-20-84 X`09;`09Module : X`09;`09`09Insert - Searches for match string and replaces X`09;`09`09`09 a match with a replacement string. X`09;`09`09`09 No checking is done. X`09; X`09.title`09INSERT_STR`09Insert a string X`09.ident`09/insert_str/ X`09.psect`09misc1$code,pic,con,rel,lcl,shr,exe,rd,nowrt,2 X`09.entry`09INSERT_STR,`5EM X`09movl`094(ap),r4`09`09; Address of source string X`09movl`098(ap),r5`09`09; Address of match string X`09matchc`09(r5),2(r5),(r4),2(r4)`09; Look for match X`09bneq`091$`09`09`09; No match? X`09movl`09r3,r6`09`09`09; Save for second MOVC X`09movzwl`09(r5),r0`09`09`09; Length of match string X`09subl2`09r0,r6`09`09`09; Dest for second MOVC X`09subw3`09(r5),@12(ap),r1`09`09; rep_len - mtc_len X`09cvtwl`09r1,r1`09`09`09; Convert to longword X`09addw`09r1,(r4)`09`09`09; Zap length of source X`09addl2`09r3,r1`09`09`09; R1=Move to, R3=Move from X`09movc3`09r2,(r3),(r1)`09`09; Adjust source string X`09movl`0912(ap),r0`09`09; Address of replace string X`09movc3`09(r0),2(r0),(r6)`09`09; Put replace string into source +-+-+-+-+-+-+-+- END OF PART 70 +-+-+-+-+-+-+-+-