-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy paththings.asm
More file actions
1623 lines (1419 loc) · 26 KB
/
things.asm
File metadata and controls
1623 lines (1419 loc) · 26 KB
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
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
;/*
; * inv_name:
; * Return the name of something as it would appear in an
; * inventory.
; */
_nameof:
LINK A5,#-$0050
MOVEM.L D4-D6/A2,-(A7)
MOVEA.L $0008(A5),A2
MOVE.W $000C(A5),D4
MOVE.W $0020(A2),D5
MOVEQ #$00,D6
MOVE.L _prbuf(A4),_nameof_tmp(A4) ;_prbuf
MOVE.L A2,-(A7)
JSR _typeof
ADDQ.W #4,A7
; EXT.L D0
BRA.W L00AEA
; scroll
L00ABB:
PEA L00AF2(PC) ;"scroll"
MOVE.W D4,-(A7)
MOVE.L A2,-(A7)
JSR _do_count(PC)
LEA $000A(A7),A7
MOVE.W D4,D3
AND.W #$0004,D3 ;only the simple name?
BEQ.B L00ABE
LEA _s_know(A4),A6 ;_s_know
TST.B $00(A6,D5.W)
BEQ.B L00ABC
MOVE.W D5,D3
; EXT.L D3
ASL.w #3,D3
LEA _s_magic(A4),A6 ;_s_magic
MOVE.L $00(A6,D3.w),-(A7)
PEA L00AF3(PC) ;"of %s"
JSR _nmadd
ADDQ.W #8,A7
BRA.B L00ABE
L00ABC:
MOVE.W D5,D3
MULU.W #21,D3
LEA _s_guess(A4),A6 ;_s_guess
TST.B $00(A6,D3.L)
BEQ.B L00ABD
MOVE.W D5,D3
MULU.W #21,D3
; LEA _s_guess(A4),A6 ;_s_guess
ADD.L A6,D3
MOVE.L D3,-(A7)
PEA L00AF4(PC) ;"called %s"
JSR _nmadd
ADDQ.W #8,A7
BRA.B L00ABE
L00ABD:
MOVEQ #$01,D6
L00ABE:
TST.W D6
BNE.B L00ABF
MOVE.W D4,D3
AND.W #$0002,D3 ;with whats made of?
BEQ.B L00AC0
L00ABF:
MOVE.W D5,D3
MULU.W #21,D3
LEA _s_names(A4),A6 ;_s_names
ADD.L A6,D3
MOVE.L D3,-(A7)
PEA L00AF5(PC) ;"titled '%s'"
JSR _nmadd
ADDQ.W #8,A7
L00AC0:
BRA.W L00AEB
; potions
L00AC1:
MOVEQ #$00,D6
PEA L00AF6(PC) ;"potion"
MOVE.W D4,-(A7)
MOVE.L A2,-(A7)
JSR _do_count(PC)
LEA $000A(A7),A7
MOVE.W D4,D3
AND.W #$0004,D3 ;only the simple name?
BEQ.B L00AC4
LEA _p_know(A4),A6 ;_p_know
TST.B $00(A6,D5.W)
BEQ.B L00AC2
MOVE.W D5,D3
; EXT.L D3
ASL.w #2,D3
LEA _p_colors(A4),A6 ;_p_colors
MOVE.L $00(A6,D3.w),-(A7)
MOVE.W D5,D3
; EXT.L D3
ASL.w #3,D3
LEA _p_magic(A4),A6 ;_p_magic
MOVE.L $00(A6,D3.w),-(A7)
PEA L00AF7(PC) ;"of %s(%s)"
JSR _nmadd
LEA $000C(A7),A7
BRA.B L00AC4
L00AC2:
MOVE.W D5,D3
MULU.W #21,D3
LEA _p_guess(A4),A6 ;_p_guess
TST.B $00(A6,D3.L)
BEQ.B L00AC3
MOVE.W D5,D3
; EXT.L D3
ASL.w #2,D3
LEA _p_colors(A4),A6 ;_p_colors
MOVE.L $00(A6,D3.w),-(A7)
MOVE.W D5,D3
MULU.W #21,D3
LEA _p_guess(A4),A6 ;_p_guess
ADD.L A6,D3
MOVE.L D3,-(A7)
PEA L00AF8(PC) ;"called %s(%s)"
JSR _nmadd
LEA $000C(A7),A7
BRA.B L00AC4
L00AC3:
MOVEQ #$01,D6
L00AC4:
TST.W D6
BEQ.B L00AC5
MOVE.L _prbuf(A4),_nameof_tmp(A4) ;_prbuf
MOVE.W D5,D3
; EXT.L D3
ASL.w #2,D3
LEA _p_colors(A4),A6 ;_p_colors
MOVE.L $00(A6,D3.w),-(A7)
PEA L00AF9(PC) ;"%s potion"
PEA -$0050(A5)
JSR _sprintf
LEA $000C(A7),A7
PEA -$0050(A5)
MOVE.W D4,-(A7)
MOVE.L A2,-(A7)
JSR _do_count(PC)
LEA $000A(A7),A7
L00AC5:
BRA.W L00AEB
; food
L00AC6:
CMP.W #$0001,D5
BNE.B L00AC7
MOVE.W D4,D3
AND.W #$0002,D3 ;with whats made of?
BEQ.B L00AC7
PEA _fruit(A4)
MOVE.W D4,-(A7)
MOVE.L A2,-(A7)
JSR _do_count(PC)
LEA $000A(A7),A7
BRA.B L00ACB
L00AC7:
MOVE.W D4,D3
AND.W #$0010,D3 ;should we change text for plurals?
BEQ.B L00ACA
CMPI.W #$0001,$001E(A2) ;one or more food?
BNE.B L00AC8
PEA L00AFA(PC) ;"Some food"
JSR _nmadd
ADDQ.W #4,A7
BRA.B L00AC9
L00AC8:
MOVE.W $001E(A2),-(A7)
PEA L00AFB(PC) ;"%d rations of food"
JSR _nmadd
ADDQ.W #6,A7
L00AC9:
BRA.B L00ACB
L00ACA:
PEA L00AFC(PC) ;"food"
JSR _nmadd
ADDQ.W #4,A7
L00ACB:
BRA.W L00AEB
; weapon type
L00ACC:
MOVE.W D4,D3
AND.W #$0010,D3 ;should we change text for plurals?
BEQ.B L00ACE
CMPI.W #$0001,$001E(A2) ;how many do we have?
BLE.B L00ACD
MOVE.W $001E(A2),-(A7)
PEA L00AFD(PC) ;"%d"
JSR _nmadd
ADDQ.W #6,A7
BRA.B L00ACE
L00ACD:
MOVE.W D5,D3
; EXT.L D3
ASL.w #2,D3
LEA _w_names(A4),A6 ;_w_names
MOVE.L $00(A6,D3.w),-(A7)
JSR _vowelstr(PC)
ADDQ.W #4,A7
MOVE.L D0,-(A7)
PEA L00AFE(PC) ;"A%s"
JSR _nmadd
ADDQ.W #8,A7
L00ACE:
MOVE.W D4,D3
AND.W #$0008,D3 ;with stats or only name?
BEQ.B L00ACF
MOVE.W $0028(A2),D3
AND.W #O_ISKNOW,D3
BEQ.B L00ACF
MOVE.W #$006D,-(A7) ;m weapon type
MOVE.W $0024(A2),-(A7)
MOVE.W $0022(A2),-(A7)
JSR _num(PC)
ADDQ.W #6,A7
MOVE.L D0,-(A7)
JSR _nmadd
ADDQ.W #4,A7
L00ACF:
CMPI.W #$0001,$001E(A2) ;how many do we have?
BLE.B L00AD0
MOVE.W D4,D3
AND.W #$0010,D3 ;should we append 's' for plurals?
BEQ.B L00AD0
LEA L00B00(PC),A6 ;"s"
MOVE.L A6,D3
BRA.B L00AD1
L00AD0:
LEA L00B01(PC),A6 ;"",0
MOVE.L A6,D3
L00AD1:
MOVE.L D3,-(A7)
MOVE.W D5,D3
; EXT.L D3
ASL.w #2,D3
LEA _w_names(A4),A6 ;_w_names
MOVE.L $00(A6,D3.w),-(A7)
PEA L00AFF(PC) ;"%s%s"
JSR _nmadd
LEA $000C(A7),A7
MOVE.W D4,D3
AND.W #$0040,D3 ;print with full stats
BEQ.B L00AD2
TST.B $002A(A2) ; test for special feature (monster slayer weapon)
BEQ.B L00AD2
MOVE.W $0028(A2),D3 ;monster slayer known?
AND.W #O_SPECKNOWN,D3
BEQ.B L00AD2
MOVE.B $002A(A2),D3
EXT.W D3
SUB.W #$0041,D3 ;'A'
MULU.W #26,D3
LEA _monsters(A4),A6 ;_monsters
MOVE.L $00(A6,D3.L),-(A7)
PEA L00B02(PC) ;"of %s slaying"
JSR _nmadd
ADDQ.W #8,A7
L00AD2:
BRA.W L00AEB
; armor type
L00AD3:
MOVE.W D4,D3
AND.W #$0008,D3 ;with stats or only name?
BEQ.B L00AD5
MOVE.W $0028(A2),D3
AND.W #O_ISKNOW,D3
BEQ.B L00AD5
MOVE.W D5,D3
; EXT.L D3
ASL.w #2,D3
LEA _a_names(A4),A6 ;_a_names
MOVE.L $00(A6,D3.w),-(A7)
MOVE.W #$0061,-(A7) ;a armor type
CLR.W -(A7)
MOVE.W D5,D3
; EXT.L D3
ASL.w #1,D3
LEA _a_class(A4),A6 ;_a_class
MOVE.W $00(A6,D3.w),D2
SUB.W $0026(A2),D2
MOVE.W D2,-(A7)
JSR _num(PC)
ADDQ.W #6,A7
MOVE.L D0,-(A7)
PEA L00B03(PC) ;"%s %s"
JSR _nmadd
LEA $000C(A7),A7
MOVE.W D4,D3
AND.W #$0040,D3 ;print with full stats
BEQ.B L00AD4
MOVE.W $0026(A2),D3
SUB.W #11,D3
NEG.W D3
MOVE.W D3,-(A7)
PEA L00B04(PC) ;"[armor class %d]"
JSR _nmadd
ADDQ.W #6,A7
L00AD4:
BRA.B L00AD6
L00AD5:
MOVE.W D5,D3
; EXT.L D3
ASL.w #2,D3
LEA _a_names(A4),A6 ;_a_names
MOVE.L $00(A6,D3.w),-(A7)
JSR _nmadd
ADDQ.W #4,A7
L00AD6:
BRA.W L00AEB
; amulet of yendor
L00AD7:
PEA L00B05(PC) ;"The Amulet of Yendor"
JSR _nmadd
ADDQ.W #4,A7
BRA.W L00AEB
; wand/staff
L00AD8:
MOVE.W D4,D3
AND.W #$0004,D3 ;only the simple name?
BEQ.W L00ADC
LEA _ws_know(A4),A6 ;_ws_know
TST.B $00(A6,D5.W)
BEQ.B L00AD9
MOVE.W D5,D3
; EXT.L D3
ASL.w #2,D3
LEA _ws_made(A4),A6 ;_ws_made
MOVE.L $00(A6,D3.w),-(A7)
MOVE.W D5,D3
; EXT.L D3
ASL.w #3,D3
LEA _ws_magic(A4),A6 ;_ws_magic
MOVE.L $00(A6,D3.w),-(A7)
MOVE.W D5,D3
; EXT.L D3
ASL.w #2,D3
LEA _ws_type(A4),A6 ;_ws_type
MOVE.L $00(A6,D3.w),-(A7)
PEA L00B06(PC) ;"%s of %s(%s)"
PEA -$0050(A5)
JSR _sprintf
LEA $0014(A7),A7
BRA.B L00ADD
L00AD9:
MOVE.W D5,D3
MULU.W #21,D3
LEA _ws_guess(A4),A6 ;_ws_guess
TST.B $00(A6,D3.L)
BEQ.B L00ADC
MOVE.W D5,D3
; EXT.L D3
ASL.w #2,D3
LEA _ws_made(A4),A6 ;_ws_made
MOVE.L $00(A6,D3.w),-(A7)
MOVE.W D5,D3
MULU.W #21,D3
LEA _ws_guess(A4),A6 ;_ws_guess
ADD.L A6,D3
MOVE.L D3,-(A7)
MOVE.W D5,D3
; EXT.L D3
ASL.w #2,D3
LEA _ws_type(A4),A6 ;_ws_type
MOVE.L $00(A6,D3.w),-(A7)
PEA L00B07(PC) ;"%s called %s(%s)"
PEA -$0050(A5)
JSR _sprintf
LEA $0014(A7),A7
BRA.B L00ADD
L00ADC:
MOVEQ #$01,D6
L00ADD:
TST.W D6
BEQ.B L00ADF
MOVE.W D4,D3
AND.W #$0002,D3 ;with whats made of?
BEQ.B L00ADE
MOVE.W D5,D3
; EXT.L D3
ASL.w #2,D3
LEA _ws_type(A4),A6 ;_ws_type
MOVE.L $00(A6,D3.w),-(A7)
MOVE.W D5,D3
; EXT.L D3
ASL.w #2,D3
LEA _ws_made(A4),A6 ;_ws_made
MOVE.L $00(A6,D3.w),-(A7)
PEA L00B08(PC) ;"%s %s"
PEA -$0050(A5)
JSR _sprintf
LEA $0010(A7),A7
BRA.B L00ADF
L00ADE:
MOVE.W D5,D3
; EXT.L D3
ASL.w #2,D3
LEA _ws_type(A4),A6 ;_ws_type
MOVE.L $00(A6,D3.w),-(A7)
PEA -$0050(A5)
JSR _strcpy
ADDQ.W #8,A7
L00ADF:
PEA -$0050(A5)
MOVE.W D4,-(A7)
MOVE.L A2,-(A7)
JSR _do_count(PC)
LEA $000A(A7),A7
MOVE.W D4,D3
AND.W #$0040,D3 ;print with full stats
BEQ.B L00AE0
MOVE.L A2,-(A7)
JSR _charge_str
ADDQ.W #4,A7
MOVE.L D0,-(A7)
JSR _nmadd
ADDQ.W #4,A7
L00AE0:
BRA.W L00AEB
; ring
L00AE1:
MOVE.W D4,D3
AND.W #$0004,D3 ;only the simple name?
BEQ.W L00AE7
LEA _r_know(A4),A6 ;_r_know
TST.B $00(A6,D5.W)
BEQ.B L00AE4
MOVE.W D5,D3
; EXT.L D3
ASL.w #2,D3
LEA _r_stones(A4),A6 ;_r_stones
MOVE.L $00(A6,D3.w),-(A7)
MOVE.W D5,D3
; EXT.L D3
ASL.w #3,D3
LEA _r_magic(A4),A6
MOVE.L $00(A6,D3.w),-(A7)
MOVE.W D4,D3
AND.W #$0008,D3
BEQ.B L00AE2
MOVE.L A2,-(A7)
JSR _ring_num(PC)
ADDQ.W #4,A7
MOVE.L D0,D3
BRA.B L00AE3
L00AE2:
LEA L00B01(PC),A6 ;"",0
MOVE.L A6,D3
L00AE3:
MOVE.L D3,-(A7)
PEA L00B09(PC)
PEA -$0050(A5)
JSR _sprintf
LEA $0014(A7),A7
BRA.B L00AE8
L00AE4:
MOVE.W D5,D3
MULU.W #21,D3
LEA _r_guess(A4),A6 ;_r_guess
TST.B $00(A6,D3.L)
BEQ.B L00AE7
MOVE.W D5,D3
; EXT.L D3
ASL.w #2,D3
LEA _r_stones(A4),A6 ;_r_stones
MOVE.L $00(A6,D3.w),-(A7)
MOVE.W D5,D3
MULU.W #21,D3
LEA _r_guess(A4),A6 ;_r_guess
ADD.L A6,D3
MOVE.L D3,-(A7)
PEA L00B0B(PC) ;"ring called %s(%s)"
PEA -$0050(A5)
JSR _sprintf
LEA $0010(A7),A7
BRA.B L00AE8
L00AE7:
MOVEQ #$01,D6
L00AE8:
TST.W D6
BEQ.B L00AE9
MOVE.W D5,D3
; EXT.L D3
ASL.w #2,D3
LEA _r_stones(A4),A6 ;_r_stones
MOVE.L $00(A6,D3.w),-(A7)
PEA L00B0C(PC) ;"%s ring"
PEA -$0050(A5)
JSR _sprintf
LEA $000C(A7),A7
L00AE9:
PEA -$0050(A5)
MOVE.W D4,-(A7)
MOVE.L A2,-(A7)
JSR _do_count(PC)
LEA $000A(A7),A7
BRA.B L00AEB
L00AEA:
SUB.w #$0021,D0 ;'!' potions
BEQ.W L00AC1
SUB.w #$000B,D0 ;',' amulet of yendor
BEQ.W L00AD7
SUBQ.w #3,D0 ;'/' wand/staff
BEQ.W L00AD8
SUB.w #$000B,D0 ;':' food
BEQ.W L00AC6
SUBQ.w #3,D0 ;'=' ring
BEQ.W L00AE1
SUBQ.w #2,D0 ;'?' scroll
BEQ.W L00ABB
SUB.w #$0022,D0 ;'a' armor type
BEQ.W L00AD3
SUB.w #$000C,D0 ;'m' weapon type
BEQ.W L00ACC
L00AEB:
MOVE.W D4,D3
AND.W #$0001,D3 ;should we print the wearing/worn text?
BEQ.B L00AEF
CMPA.L _cur_armor(A4),A2 ;_cur_armor
BNE.B L00AEC
PEA L00B0D(PC) ;"(being worn)"
JSR _nmadd
ADDQ.W #4,A7
L00AEC:
CMPA.L _cur_weapon(A4),A2 ;_cur_weapon
BNE.B L00AED
PEA L00B0E(PC) ;"(weapon in hand)"
JSR _nmadd
ADDQ.W #4,A7
L00AED:
CMPA.L _cur_ring_1(A4),A2 ;_cur_ring_1
BNE.B L00AEE
PEA L00B0F(PC) ;"(on left hand)"
JSR _nmadd
ADDQ.W #4,A7
BRA.B L00AEF
L00AEE:
CMPA.L _cur_ring_2(A4),A2 ;_cur_ring_2
BNE.B L00AEF
PEA L00B10(PC) ;"(on right hand)"
JSR _nmadd
ADDQ.W #4,A7
L00AEF:
MOVE.W D4,D3
AND.W #$0020,D3 ;should we capitalize the word
BNE.B L00AF0
MOVEA.L _prbuf(A4),A6 ;_prbuf
MOVE.B (A6),D0
JSR _isupper
TST.W D0
BEQ.B L00AF0
MOVEA.L _prbuf(A4),A6 ;_prbuf
MOVE.L A6,-(A7)
MOVEA.L _prbuf(A4),A6 ;_prbuf
MOVE.B (A6),D3
MOVE.W D3,-(A7)
JSR _tolower
ADDQ.W #2,A7
MOVEA.L (A7)+,A6
MOVE.B D0,(A6)
BRA.B L00AF1
L00AF0:
MOVE.W D4,D3
AND.W #$0020,D3 ;should we capitalize the word
BEQ.B L00AF1
MOVEA.L _prbuf(A4),A6 ;_prbuf
MOVE.B (A6),D0
JSR _islower
TST.W D0
BEQ.B L00AF1
MOVEA.L _prbuf(A4),A6 ;_prbuf
MOVE.L A6,-(A7)
MOVEA.L _prbuf(A4),A6 ;_prbuf
MOVE.B (A6),D3
MOVE.W D3,-(A7)
JSR _toupper
ADDQ.W #2,A7
MOVEA.L (A7)+,A6
MOVE.B D0,(A6)
L00AF1:
MOVE.L _prbuf(A4),D0 ;_prbuf
MOVEM.L (A7)+,D4-D6/A2
UNLK A5
RTS
L00AF2: dc.b "scroll",0
L00AF3: dc.b "of %s",0
L00AF4: dc.b "called %s",0
L00AF5: dc.b "titled '%s'",0
L00AF6: dc.b "potion",0
L00AF7: dc.b "of %s(%s)",0
L00AF8: dc.b "called %s(%s)",0
L00AF9: dc.b "%s potion",0
L00AFA: dc.b "Some food",0
L00AFB: dc.b "%d rations of food",0
L00AFC: dc.b "food",0
L00AFD: dc.b "%d",0
L00AFE: dc.b "A%s",0
L00AFF: dc.b "%s%s",0
L00B00: dc.b "s",0
L00B01: dc.b $00
L00B02: dc.b "of %s slaying",0
L00B03: dc.b "%s %s",0
L00B04: dc.b "[armor class %d]",0
L00B05: dc.b "The Amulet of Yendor",0
L00B06: dc.b "%s of %s(%s)",0
L00B07: dc.b "%s called %s(%s)",0
L00B08: dc.b "%s %s",0
L00B09: dc.b "%sring of %s(%s)",0
L00B0B: dc.b "ring called %s(%s)",0
L00B0C: dc.b "%s ring",0
L00B0D: dc.b "(being worn)",0
L00B0E: dc.b "(weapon in hand)",0
L00B0F: dc.b "(on left hand)",0
L00B10: dc.b "(on right hand)",0
;/*
; * drop:
; * Put something down
; */
_drop:
LINK A5,#-$0000
MOVEM.L D4/A2/A3,-(A7)
JSR _INDEXplayer
MOVEA.L __level(A4),A6 ;__level
MOVE.B $00(A6,D0.W),D4
CMP.b #$2E,D4 ;'.'
BEQ.B L0052D
CMP.b #$23,D4 ;'#'
BEQ.B L0052D
PEA L00535(PC) ;"there is something there already"
JSR _msg
ADDQ.W #4,A7
L0052C:
MOVEM.L (A7)+,D4/A2/A3
UNLK A5
RTS
L0052D:
CLR.W -(A7)
PEA L00536(PC) ;"drop"
JSR _get_item
ADDQ.W #6,A7
MOVEA.L D0,A3
TST.L D0
BEQ.B L0052C
MOVE.L A3,-(A7)
JSR _can_drop(PC)
ADDQ.W #4,A7
TST.W D0
BEQ.B L0052C
CMPI.W #$0002,$001E(A3)
BLT.B L00530
TST.W $002C(A3)
BNE.B L00531
L00530:
MOVEq #$0001,D3
BRA.B L00532
L00531:
CLR.W D3
L00532:
MOVE.W D3,-(A7)
MOVE.L A3,-(A7)
JSR _unpack
ADDQ.W #6,A7
MOVEA.L D0,A3
TST.L D0
BNE.B L00533
JSR _stuck(PC)
BRA.B L0052C
L00533:
MOVE.L A3,-(A7)
PEA _lvl_obj(A4) ;_lvl_obj
JSR __attach
ADDQ.W #8,A7
JSR _INDEXplayer
MOVEA.L __level(A4),A6 ;__level
MOVE.B $000B(A3),$00(A6,D0.W)
MOVEA.L A3,A6
ADDA.L #$0000000C,A6
LEA _player+10(A4),A1 ;_player + 10
MOVE.L (A1)+,(A6)+
CMPI.W #$002C,$000A(A3) ;',' amulet of yendor
BNE.B L00534
CLR.B _amulet(A4) ;_amulet
L00534:
MOVE.W #$001E,-(A7)
MOVE.L A3,-(A7)
JSR _nameof
ADDQ.W #6,A7
MOVE.L D0,-(A7)
PEA L00537(PC) ;"dropped %s"
JSR _msg
ADDQ.W #8,A7
BRA.W L0052C
L00535: dc.b "there is something there already",0
L00536: dc.b "drop",0
L00537: dc.b "dropped %s",0,0
;/*
; * dropcheck:
; * Do special checks for dropping or unweilding|unwearing|unringing
; */
_can_drop:
LINK A5,#-$0000
MOVEM.L D4/A2,-(A7)
MOVEA.L $0008(A5),A2
MOVE.L A2,D3
BNE.B L00539
L00538b:
MOVEQ #$01,D0
L00538:
MOVEM.L (A7)+,D4/A2
UNLK A5
RTS
L00539:
CMPA.L _cur_armor(A4),A2 ;_cur_armor
BEQ.B L0053A
CMPA.L _cur_weapon(A4),A2 ;_cur_weapon
BEQ.B L0053A
CMPA.L _cur_ring_1(A4),A2 ;_cur_ring_1
BEQ.B L0053A
CMPA.L _cur_ring_2(A4),A2 ;_cur_ring_2
BNE.B L00538b
L0053A:
MOVE.W $0028(A2),D3
AND.W #O_ISCURSED,D3 ; check for O_ISCURSED bit
BEQ.B L0053B
PEA L00543(PC) ;"you can't. It appears to be cursed"
JSR _msg
ADDQ.W #4,A7
MOVEQ #$00,D0
BRA.B L00538
L0053B:
CMPA.L _cur_weapon(A4),A2 ;_cur_weapon
BNE.B L0053C
CLR.L _cur_weapon(A4) ;_cur_weapon
BRA.B L00542
L0053C:
CMPA.L _cur_armor(A4),A2 ;_cur_armor
BNE.B L0053D
JSR _waste_time
CLR.L _cur_armor(A4) ;_cur_armor
BRA.B L00542
L0053D:
MOVEQ #$00,D3
LEA _cur_ring_1(A4),A6 ;_cur_ring_x
CMPA.L $00(A6,D3.w),A2 ;ring slot 0
BEQ.B L0053E
MOVEQ #$04,D3
CMPA.L $00(A6,D3.w),A2 ;ring slot 1
BNE.B L00538b
L0053E:
; LEA _cur_ring_1(A4),A6 ;_cur_ring_x
CLR.L $00(A6,D3.w)
MOVE.W $0020(A2),D0 ;ring id
; EXT.L D0
SUBQ.w #1,D0 ; ring of add strength
BEQ.B L0053F
SUBQ.w #3,D0 ; ring of see invisible
BEQ.B L00540
L00542:
MOVE.W #$0001,-(A7)
MOVE.L A2,-(A7)
JSR _pack_name
ADDQ.W #6,A7
BRA.W L00538b
; ring of add strength
L0053F:
MOVE.W $0026(A2),D3
NEG.W D3
MOVE.W D3,-(A7)
JSR _chg_str
ADDQ.W #2,A7
BRA.B L00542
; ring of see invisible
L00540:
JSR _unsee(PC)
PEA _unsee(PC)
JSR _extinguish(PC)
ADDQ.W #4,A7
BRA.B L00542
L00543: dc.b "you can't. It appears to be cursed",0
;/*
; * new_thing:
; * Return a new thing
; */
_new_thing:
LINK A5,#-$0000
MOVEM.L D4/D5/A2,-(A7)
JSR _new_item
MOVEA.L D0,A2
TST.L D0
BNE.B L00545
MOVEQ #$00,D0
L00544:
MOVEM.L (A7)+,D4/D5/A2
UNLK A5
RTS
L00545:
CLR.W $0024(A2) ;zero damage
CLR.W $0022(A2) ;zero hit
MOVE.L _no_damage(A4),$001A(A2) ;_no_damage throw damage
MOVE.L $001A(A2),$0016(A2) ;wield damage
MOVE.W #$000B,$0026(A2) ;armor class base value
MOVE.W #$0001,$001E(A2) ;one item
CLR.W $002C(A2) ;no group
CLR.W $0028(A2) ;flags like cursed and so on
CLR.B $002A(A2) ;not a monster slayer
CMPI.W #$0003,_no_food(A4) ;_no_food
BLE.B 1$
MOVEQ #$02,D0 ;generate food
BRA.B 2$
1$ MOVE.W #$0007,-(A7)
PEA _things(A4)
JSR _pick_one(PC)
ADDQ.W #6,A7
2$
; EXT.L D0
BRA.W L00560
; potions
L00548:
MOVE.W #$0021,$000A(A2) ;'!'
MOVE.W #14,-(A7)
PEA _p_magic(A4) ;_p_magic
JSR _pick_one(PC)
ADDQ.W #6,A7
MOVE.W D0,$0020(A2)
BRA.W L00562
; scrolls
L00549:
MOVE.W #$003F,$000A(A2) ;'?'
MOVE.W #15,-(A7)
PEA _s_magic(A4)
JSR _pick_one(PC)
ADDQ.W #6,A7
MOVE.W D0,$0020(A2)
BRA.W L00562
; food
L0054A:
CLR.W _no_food(A4) ;_no_food
MOVE.W #$003A,$000A(A2) ;':'
MOVEq #10,D0
JSR _rnd
TST.W D0
BEQ.B L0054B
CLR.W $0020(A2)
BRA.B L0054C
L0054B:
MOVE.W #$0001,$0020(A2)
L0054C:
BRA.W L00562
; weapon
L0054D:
MOVEq #10,D0
JSR _rnd
MOVE.W D0,$0020(A2) ;random subtype
MOVE.L A2,-(A7)
JSR _init_weapon
ADDQ.W #4,A7
MOVEq #100,D0
JSR _rnd
MOVE.W D0,D5
CMP.W #10,D0
BGE.B L0054E
ORI.W #O_ISCURSED,$0028(A2) ; 10% chance that the weapon is cursed
MOVEq #$0003,D0
JSR _rnd
ADDQ.W #1,D0
SUB.W D0,$0022(A2) ;1-3 negative hit
BRA.B L0054F
L0054E:
CMP.W #15,D5
BGE.B L0054F ;5% chance for a enchanted weapon
MOVEq #$0003,D0
JSR _rnd
ADDQ.W #1,D0
ADD.W D0,$0022(A2) ;1-3 positive hit
L0054F:
BRA.W L00562
; armor
L00550:
MOVEQ #$00,D4
MOVEq #100,D0