-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcommand.asm
More file actions
1470 lines (1285 loc) · 24.3 KB
/
command.asm
File metadata and controls
1470 lines (1285 loc) · 24.3 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
;/*
; * command:
; * Process the user commands
; */
_command:
LINK A5,#-$0000
MOVEM.L D4/D5,-(A7)
TST.B _is_wizard(A4) ;_is_wizard
BEQ.B L00398
MOVE.B #$02,_wizard(A4) ;_wizard
BRA.B L00399
L00398:
CMP.B #2,_wizard(A4) ;_wizard
BNE.B L00399
CLR.B _wizard(A4) ;_wizard
L00399:
MOVE.W _player+22(A4),D3 ;_player + 22 (flags)
AND.W #C_ISHASTE,D3 ;C_ISHASTE
BEQ.B L0039A
MOVEq #$0002,D0
JSR _rnd
MOVE.W D0,D4
ADDQ.W #2,D4
BRA.B L0039B
L0039A:
MOVEQ #$01,D4
L0039B:
MOVE.W D4,D3
SUBQ.W #1,D4
TST.W D3
BEQ.W L003A5
JSR _status
TST.W _no_command(A4) ;_no_command
BEQ.B L0039D
SUBQ.W #1,_no_command(A4) ;_no_command
CMPI.W #$0000,_no_command(A4) ;_no_command
BGT.B L0039E
PEA L003A6(PC) ;"you can move again"
JSR _msg
ADDQ.W #4,A7
CLR.W _no_command(A4) ;_no_command
BRA.B L0039E
L0039D:
JSR _execcom(PC)
L0039E:
MOVEQ #$00,D5
L0039F:
LEA _cur_ring_1(A4),A6 ;_cur_ring_x
MOVE.L $00(A6,D5.w),D0
BEQ.B L003A4
MOVEA.L D0,A1
MOVE.W $0020(A1),D0
BRA.B L003A3
L003A0:
JSR _search(PC)
BRA.B L003A4
L003A1:
MOVEq #50,D0
JSR _rnd
CMP.W #17,D0
BNE.B L003A4
JSR _teleport
BRA.B L003A4
L003A3:
SUBQ.w #3,D0 ; ring of searching
BEQ.B L003A0
SUBQ.w #8,D0 ; ring of teleportation
BEQ.B L003A1
L003A4:
ADDQ.W #4,D5
CMP.W #$0004,D5
BLE.B L0039F
BRA.W L0039B
L003A5:
JSR _do_daemons(PC)
MOVEM.L (A7)+,D4/D5
UNLK A5
RTS
L003A6: dc.b "you can move again",0,0
_com_char:
LINK A5,#-$0000
MOVEM.L D4/D5,-(A7)
MOVE.B _fastmode(A4),D3 ;_fastmode
CMP.B _faststate(A4),D3 ;_faststate
SEQ D4
ST _menu_on(A4) ;_menu_on
L003A7:
JSR _readchar
MOVE.W D0,D5
AND.W #$0080,D0
BEQ.B L003A8
MOVE.W D5,D3
AND.W #$007F,D3
MOVE.W D3,-(A7)
JSR _ChangeFuncKey
ADDQ.W #2,A7
BRA.B L003A7
L003A8:
CLR.B _menu_on(A4) ;_menu_on
TST.W D4
BEQ.B L003A9
MOVE.B _faststate(A4),_fastmode(A4) ;_faststate,_fastmode
BRA.B L003AC
L003A9:
TST.B _faststate(A4) ;_faststate
SEQ _fastmode(A4) ;_fastmode
L003AC:
MOVE.W D5,D0
; EXT.L D0
BRA.B L003B2
L003AD:
MOVEQ #$74,D5
BRA.B L003B3
L003AE:
MOVEQ #$7A,D5
BRA.B L003B3
L003AF:
ADD.W #$0060,D5
TST.B _fastmode(A4) ;_fastmode
SEQ _fastmode(A4) ;_fastmode
BRA.B L003B3
L003B2:
SUBQ.w #2,D0 ;B
BEQ.B L003AF
SUBQ.w #6,D0 ;H
BEQ.B L003AF
SUBQ.w #2,D0 ;J
BEQ.B L003AF
SUBQ.w #1,D0 ;K
BEQ.B L003AF
SUBQ.w #1,D0 ;L
BEQ.B L003AF
SUBQ.w #2,D0 ;N
BEQ.B L003AF
SUBQ.w #7,D0 ;U
BEQ.B L003AF
SUBQ.w #4,D0 ;Y
BEQ.B L003AF
SUB.w #$0012,D0 ;k
BEQ.B L003AD
SUBQ.w #2,D0 ;m
BEQ.B L003AE
L003B3:
TST.W _mpos(A4) ;_mpos
BEQ.B L003B5
TST.B _running(A4) ;_running
BNE.B L003B5
CMP.W #$007F,D5
BNE.B L003B4
CLR.W _mpos(A4) ;_mpos
BRA.B L003B5
L003B4:
PEA L003B6(PC)
JSR _msg
ADDQ.W #4,A7
L003B5:
MOVE.W D5,D0
MOVEM.L (A7)+,D4/D5
UNLK A5
RTS
L003B6:
dc.w $0000
_get_prefix:
; LINK A5,#-$0000
MOVEM.L D4-D6,-(A7)
ST _after(A4) ;_after
MOVE.B _faststate(A4),_fastmode(A4) ;_faststate,_fastmode
MOVE.W #$0001,-(A7)
JSR _look
ADDQ.W #2,A7
TST.B _running(A4) ;_running
BNE.B L003B7
CLR.B _door_stop(A4) ;_door_stop
L003B7:
ST _is_pickup(A4) ;_is_pickup
CLR.B _again(A4) ;_again
SUBQ.W #1,_count(A4) ;_count
; CMPI.W #$0000,_count(A4) ;_count
BLE.B L003B8
MOVE.B _is_pickup_tmp(A4),_is_pickup(A4) ;_is_pickup
MOVEQ #$00,D3
MOVE.B _is_again(A4),D3
MOVE.W D3,D4
CLR.B _fastmode(A4) ;_fastmode
BRA.W L003C7
L003B8:
CLR.W _count(A4) ;_count
TST.B _running(A4) ;_running
BEQ.B L003B9
JSR _one_tick ;slow down the fast mode
MOVE.B _runch(A4),D3 ;_runch
EXT.W D3
MOVE.W D3,D4
MOVE.B _is_pickup_tmp(A4),_is_pickup(A4) ;_is_pickup
BRA.W L003C7
L003B9:
MOVEQ #$00,D4
L003BA:
JSR _com_char(PC)
MOVE.W D0,D5
; EXT.L D0
BRA.B L003C5
L003BB:
MOVE.W _count(A4),D6 ;_count
MULU.W #10,D6
; MOVE.W D5,D3
SUB.W #$0030,D5 ;'0'
ADD.W D5,D6
; CMP.W #$0000,D6
BLE.B L003BC
CMP.W #100,D6 ;limit count to 100 (original was 10000)
BGE.B L003BC
MOVE.W D6,_count(A4) ;_count
L003BC:
JSR _show_count(PC)
BRA.W L003C6
; toggle fastmode
L003BD:
TST.B _fastmode(A4) ;_fastmode
SEQ _fastmode(A4)
BRA.W L003C6
; pressed g for dont pickup
L003C0:
CLR.B _is_pickup(A4) ;_is_pickup
BRA.W L003C6
; pressed a for again
L003C1:
MOVEQ #$00,D3
MOVE.B _is_again(A4),D3
MOVE.W D3,D4
MOVE.W _again_num(A4),_count(A4) ;_count
MOVE.B _is_pickup_tmp(A4),_is_pickup(A4) ;_is_pickup
ST _again(A4) ;_again
BRA.B L003C6
L003C3:
CLR.B _door_stop(A4) ;_door_stop
CLR.W _count(A4) ;_count
JSR _show_count(PC)
BRA.B L003C6
L003C4:
MOVE.W D5,D4
BRA.B L003C6
L003C5:
SUB.w #$001B,D0 ;escape
BEQ.B L003C3
SUBQ.w #5,D0 ;' '
BEQ.B L003C6
SUB.w #$0010,D0 ;'0'
BEQ.W L003BB
SUBQ.w #1,D0 ;'1'
BEQ.W L003BB
SUBQ.w #1,D0 ;'2'
BEQ.W L003BB
SUBQ.w #1,D0 ;'3'
BEQ.W L003BB
SUBQ.w #1,D0 ;'4'
BEQ.W L003BB
SUBQ.w #1,D0 ;'5'
BEQ.W L003BB
SUBQ.w #1,D0 ;'6'
BEQ.W L003BB
SUBQ.w #1,D0 ;'7'
BEQ.W L003BB
SUBQ.w #1,D0 ;'8'
BEQ.W L003BB
SUBQ.w #1,D0 ;'9'
BEQ.W L003BB
SUB.w #$0028,D0 ;'a'
BEQ.W L003C1
SUBQ.w #5,D0 ;'f'
BEQ.W L003BD
SUBQ.w #1,D0 ;'g'
BEQ.W L003C0
BRA.B L003C4
L003C6:
TST.W D4
BEQ.W L003BA
L003C7:
TST.W _count(A4) ;_count
BEQ.B L003C8
CLR.B _fastmode(A4) ;_fastmode
L003C8:
MOVE.W D4,D0
; EXT.L D0
BRA.B L003CD
L003C9:
TST.B _fastmode(A4) ;_fastmode
BEQ.B L003CE
TST.B _running(A4) ;_running
BNE.B L003CE
moveq #C_ISBLIND,D3 ;C_ISBLIND
AND.W _player+22(A4),D3 ;_player + 22 (flags)
BNE.B L003CA
ST _door_stop(A4) ;_door_stop
ST _firstmove(A4) ;_firstmove
L003CA:
MOVE.W D4,-(A7)
JSR _toupper
ADDQ.W #2,A7
MOVE.W D0,D4
BRA.B L003CE
L003CC:
CLR.W _count(A4) ;_count
BRA.B L003CE
L003CD:
SUBQ.w #4,D0
BEQ.B L003CE
SUB.w #$2A,D0 ;'.' for rest
BEQ.B L003CE
SUB.w #$14,D0 ;'B'
BEQ.B L003CE
SUBQ.w #1,D0 ;'C'
BEQ.B L003CE
SUBQ.w #5,D0 ;'H'
BEQ.B L003CE
SUBQ.w #2,D0 ;'J'
BEQ.B L003CE
SUBQ.w #1,D0 ;'K'
BEQ.B L003CE
SUBQ.w #1,D0 ;'L'
BEQ.B L003CE
SUBQ.w #2,D0 ;'N'
BEQ.B L003CE
SUBQ.w #7,D0 ;'U'
BEQ.B L003CE
SUBQ.w #4,D0 ;'Y'
BEQ.B L003CE
SUB.w #$09,D0 ;'b'
BEQ.B L003C9
SUBQ.w #6,D0 ;'h'
BEQ.B L003C9
SUBQ.w #2,D0 ;'j'
BEQ.B L003C9
SUBQ.w #1,D0 ;'k'
BEQ.B L003C9
SUBQ.w #1,D0 ;'l'
BEQ.B L003C9
SUBQ.w #2,D0 ;'n'
BEQ.W L003C9
SUBQ.w #3,D0 ;'q'
BEQ.B L003CE
SUBQ.w #1,D0 ;'r'
BEQ.B L003CE
SUBQ.w #1,D0 ;'s'
BEQ.B L003CE
SUBQ.w #1,D0 ;'t'
BEQ.B L003CE
SUBQ.w #1,D0 ;'u'
BEQ.W L003C9
SUBQ.w #4,D0 ;'y'
BEQ.W L003C9
SUBQ.w #1,D0 ;'z'
BNE.B L003CC
L003CE:
TST.W _count(A4) ;_count
BNE.B L003CF
TST.W _again_num(A4)
BEQ.B L003D0
L003CF:
BSR.B _show_count
L003D0:
MOVE.B D4,_is_again(A4)
MOVE.W _count(A4),_again_num(A4) ;_count
MOVE.B _is_pickup(A4),_is_pickup_tmp(A4) ;_is_pickup
MOVE.W D4,D0
MOVEM.L (A7)+,D4-D6
; UNLK A5
RTS
_show_count:
; LINK A5,#-$0000
MOVEq #$0038,d1
MOVEq #$0014,d0
JSR _movequick
TST.W _count(A4) ;_count
BEQ.B L003D1
MOVE.W _count(A4),-(A7) ;_count
PEA L003D3(PC)
JSR _printw
ADDQ.W #6,A7
BRA.B L003D2
L003D1:
PEA L003D4(PC)
JSR _addstr
ADDQ.W #4,A7
L003D2:
; UNLK A5
RTS
L003D3: dc.b "%2d",0
L003D4: dc.b " ",0,0
_execcom:
LINK A5,#-$0008
MOVE.L D4,-(A7)
L003D5:
JSR _get_prefix(PC)
MOVE.W D0,D4
; EXT.L D0
BRA.W L00408
; h,j,k,l,b,n,y,u
L003D6:
PEA -$0004(A5)
MOVE.W D4,-(A7)
JSR _find_dir(PC)
ADDQ.W #6,A7
MOVE.W -$0004(A5),-(A7)
MOVE.W -$0002(A5),-(A7)
JSR _do_move(PC)
ADDQ.W #4,A7
BRA.W L00409
; H,J,K,L,B,N,Y,U
L003D7:
MOVE.W D4,-(A7)
JSR _tolower
ADDQ.W #2,A7
MOVE.W D0,-(A7)
JSR _do_run(PC)
ADDQ.W #2,A7
BRA.W L00409
L003D8:
JSR _get_dir(PC)
TST.W D0
BEQ.B L003D9
MOVE.W _delta+0(A4),-(A7) ;_delta + 0
MOVE.W _delta+2(A4),-(A7) ;_delta + 2
JSR _missile(PC)
ADDQ.W #4,A7
BRA.B L003DA
L003D9:
CLR.B _after(A4) ;_after
L003DA:
BRA.W L00409
L003DB:
CLR.B _after(A4) ;_after
JSR _quit(PC)
BRA.W L00409
; i inventory
L003DC:
CLR.B _after(A4) ;_after
PEA L0040F(PC) ;"",0
CLR.W -(A7)
MOVE.L _player+46(A4),-(A7) ;_player + 46 (pack)
JSR _inventory(PC)
LEA $000A(A7),A7
BRA.W L00409
L003DD:
JSR _drop
BRA.W L00409
; q quaff
L003DE:
CLR.L -(A7)
JSR _quaff
ADDQ.W #4,A7
BRA.W L00409
; r read
L003DF:
CLR.L -(A7)
JSR _read_scroll
ADDQ.W #4,A7
BRA.W L00409
; e eat
L003E0:
CLR.L -(A7)
JSR _eat(PC)
ADDQ.W #4,A7
BRA.W L00409
; w wield
L003E1:
CLR.L -(A7)
JSR _wield(PC)
ADDQ.W #4,A7
BRA.W L00409
; W wear
L003E2:
CLR.L -(A7)
JSR _wear
ADDQ.W #4,A7
BRA.W L00409
; T put off armor
L003E3:
JSR _take_off
BRA.W L00409
; P put ring on
L003E4:
CLR.L -(A7)
JSR _ring_on(PC)
ADDQ.W #4,A7
BRA.W L00409
; R put ring off
L003E5:
CLR.L -(A7)
JSR _ring_off(PC)
ADDQ.W #4,A7
BRA.W L00409
; S save game
L003E6:
CLR.B _after(A4) ;_after
JSR _save_game
BRA.W L00409
; c call item
L003E7:
CLR.B _after(A4) ;_after
JSR _call(PC)
BRA.W L00409
; > go down one level
L003E8:
CLR.B _after(A4) ;_after
JSR _d_level(PC)
BRA.W L00409
; < go up one level
L003E9:
CLR.B _after(A4) ;_after
JSR _u_level(PC)
BRA.W L00409
; ? help
L003EA:
CLR.B _after(A4) ;_after
JSR _help
BRA.W L00409
; s search
L003EC:
JSR _search(PC)
BRA.W L00409
; z zap
L003ED:
JSR _get_dir(PC)
TST.W D0
BEQ.B L003EE
CLR.L -(A7)
JSR _do_zap
ADDQ.W #4,A7
BRA.B L003EF
L003EE:
CLR.B _after(A4) ;_after
L003EF:
BRA.W L00409
L003F0:
CLR.B _after(A4) ;_after
JSR _discovered
BRA.W L00409
; CTRL-T
L003F1:
CLR.B _after(A4) ;_after
EORI.B #$01,_expert(A4) ;_expert
TST.B _expert(A4) ;_expert
BEQ.B L003F2
LEA L00410(PC),A6 ;"Ok, I'll be brief"
MOVE.L A6,D3
BRA.B L003F3
L003F2:
LEA L00411(PC),A6 ;"Goodie, I can use big words again!"
MOVE.L A6,D3
L003F3:
MOVE.L D3,-(A7)
JSR _msg
ADDQ.W #4,A7
BRA.W L00409
; shift-F set macro
L003F4:
CLR.B _after(A4) ;_after
MOVE.W #$0029,-(A7)
PEA _macro(A4) ;_macro
JSR _do_macro
ADDQ.W #6,A7
BRA.W L00409
; CTRL-A
_show_map_check:
TST.B _wizard(A4) ;_wizard
BEQ.W L00409
CLR.B _after(A4) ;_after
bsr _show_map
BRA.W L00409
; CTRL-C bugfix
_add_passages:
TST.B _wizard(A4) ;_wizard
BEQ.W L00409
CLR.B _after(A4) ;_after
bsr _add_pass
BRA.W L00409
; $ show inpack bugfix
show_inpack:
TST.B _wizard(A4) ;_wizard
BEQ.W L00409
CLR.B _after(A4) ;_after
move.w _inpack(A4),-(a7) ;_inpack
pea inpacktext
JSR _msg
ADDQ.W #6,A7
BRA.W L00409
inpacktext: dc.b "inpack = %d",0
; CTRL-E bugfix
_foodleft:
TST.B _wizard(A4) ;_wizard
BEQ.W L00409
CLR.B _after(A4) ;_after
move.w _food_left(A4),-(a7) ;_food_left
pea foodlefttext
JSR _msg
ADDQ.W #6,A7
BRA.W L00409
foodlefttext: dc.b "food left: %d",0
; ctrl-f macro
L003F5:
CLR.B _after(A4) ;_after
LEA _macro(A4),A6 ;_macro
MOVE.L A6,_typeahead(A4) ;_typeahead
BRA.W L00409
; ctrl-r show last message
L003F6:
CLR.B _after(A4) ;_after
PEA _huh(A4) ;_huh
JSR _msg
ADDQ.W #4,A7
BRA.W L00409
; v show version
L003F7:
CLR.B _after(A4) ;_after
move.w #1,-(a7) ; new version extension
MOVE.W _verno(A4),-(A7) ;_verno
MOVE.W _revno(A4),-(A7) ;_revno
PEA L00412(PC) ;Rogue Version...
JSR _msg
ADD.W #10,A7
BRA.W L00409
; . rest
L003F8:
JSR _doctor(PC)
BRA.W L00409
; ^ search for traps in one direction
L003F9:
CLR.B _after(A4) ;_after
JSR _get_dir(PC)
TST.W D0
BEQ.B L003FB
MOVE.W _player+12(A4),D3 ;_player + 12
ADD.W _delta+2(A4),D3 ;_delta + 2
MOVE.W D3,-$0006(A5)
MOVE.W _player+10(A4),D3 ;_player + 10
ADD.W _delta+0(A4),D3 ;_delta + 0
MOVE.W D3,-$0008(A5)
MOVE.W -$0008(A5),d0
MOVE.W -$0006(A5),d1
JSR _INDEXquick
MOVEA.L __level(A4),A6 ;__level
MOVE.B $00(A6,D0.W),D0
JSR _typech
CMP.W #$000E,D0
BEQ.B L003FA
PEA L00413(PC) ;"no trap there."
JSR _msg
ADDQ.W #4,A7
BRA.B L003FB
L003FA:
MOVE.W -$0008(A5),d0
MOVE.W -$0006(A5),d1
JSR _INDEXquick
MOVEA.L __flags(A4),A6 ;__flags
MOVE.B $00(A6,D0.W),D3
AND.W #F_TMASK,D3
MOVE.W D3,-(A7)
JSR _tr_name(PC)
ADDQ.W #2,A7
MOVE.L D0,-(A7)
PEA L00414(PC) ;"you found %s"
JSR _msg
ADDQ.W #8,A7
L003FB:
BRA.W L00409
; o options
L003FC:
CLR.B _after(A4) ;_after
PEA L00415(PC) ;"i don't have any options, oh my!"
JSR _msg
ADDQ.W #4,A7
BRA.W L00409
; CTRL-l
L003FD:
CLR.B _after(A4) ;_after
PEA L00416(PC) ;"the screen looks fine to me (jll was here)"
JSR _msg
ADDQ.W #4,A7
BRA.W L00409
; CTRL-d
L003FE:
TST.B _wizard(A4) ;_wizard
BEQ.W L00409
ADDQ.W #1,_level(A4) ;_level
CMPI.W #$0001,_count(A4) ;_count
BLE.B L003FF
MOVE.W _count(A4),_level(A4) ;_count,_level
L003FF:
JSR _new_level
MOVE.W #$0001,_again_num(A4)
CLR.W _count(A4) ;_count
BRA.W L00409
; shift-C
L00400:
TST.B _wizard(A4) ;_wizard
BEQ.W L00409
CLR.B _after(A4) ;_after
JSR _create_obj(PC)
BRA.W L00409
; CTRL-p
L00401:
; MOVEQ #$00,D3
MOVE.B _wizard(A4),D3 ;_wizard
CMP.b #1,D3
BEQ.B L00402
PEA L00417(PC) ;"The Grand Beeking"
PEA _whoami(A4) ;_whoami
JSR _strcmp
ADDQ.W #8,A7
TST.W D0
BEQ.B L00406
PEA L00418(PC) ;"Mr. Mctesq"
PEA _whoami(A4) ;_whoami
JSR _strcmp
ADDQ.W #8,A7
TST.W D0
BEQ.B L00406
L00402:
TST.B _wizard(A4) ;_wizard
BEQ.B L00403
LEA L0041A(PC),A6 "now"
MOVE.L A6,D3
BRA.B L00404
L00403:
LEA L0041B(PC),A6 ;"just"
MOVE.L A6,D3
L00404:
MOVE.L D3,-(A7)
PEA L00419(PC) ;"Sorry, You are %s a wimpy dude!"
JSR _msg
ADDQ.W #8,A7
TST.B _wizard(A4) ;_wizard
BEQ.B L00405
MOVE.W _level(A4),D3 ;_level
ADDQ.W #1,D3
EXT.L D3
DIVS.W #$0002,D3
MOVE.W D3,_player+30(A4) ;_player + 30 (rank)
MOVE.W _level(A4),D3 ;_level
MULU.W #5,D3
MOVE.W D3,_player+40(A4) ;_player + 40 (max hp)
MOVE.W D3,_player+34(A4) ;_player + 34 (hp)
MOVE.W #$0010,_max_stats+0(A4) ;_max_stats + 0 (max strength)
MOVE.W #$0010,_player+24(A4) ;_player + 24 (strength)
JSR _raise_level
L00405:
CLR.B _wizard(A4) ;_wizard
BRA.W L00409
L00406:
MOVE.B #1,_wizard(A4) ;_wizard
MOVE.W #15,_player+30(A4) ;_player + 30 (rank)
MOVE.W #200,_player+40(A4) ;_player + 40 (max hp)
MOVE.W #200,_player+34(A4) ;_player + 34 (hp)
MOVE.W #25,_max_stats+0(A4) ;_max_stats + 0 (max strength)
MOVE.W #25,_player+24(A4) ;_player + 24 (strength)
JSR _raise_level
PEA _whoami(A4) ;_whoami
PEA L0041C(PC) ;"%s, You are one macho dude!"
JSR _msg
ADDQ.W #8,A7
BRA.W L00409
L00407:
CLR.B _after(A4) ;_after
CLR.B _save_msg(A4) ;_save_msg
MOVE.W D4,-(A7)
JSR _unctrl(PC)
ADDQ.W #2,A7
MOVE.L D0,-(A7)
PEA L0041D(PC) ;"illegal command '%s'"
JSR _msg
ADDQ.W #8,A7
CLR.W _count(A4) ;_count
MOVE.B #$01,_save_msg(A4) ;_save_msg
BRA.W L00409
L00408:
SUBQ.w #1,D0 ; CTRL-A show map (wizard only)
BEQ.W _show_map_check
SUBQ.w #2,D0 ; CTRL-C add passages (wizard only)
BEQ.W _add_passages
SUBQ.w #1,D0 ; CTRL-D level up (if you can! ;)
BEQ.W L003FE
SUBQ.w #1,D0 ; CTRL-E show food left (wizard only)
BEQ.W _foodleft
SUBQ.w #1,D0 ; CTRL-F clear macro
BEQ.W L003F5
SUBQ.w #6,D0 ; CTRL-L fun message
BEQ.W L003FD
SUBQ.w #4,D0 ; CTRL-P activate wizard mode (if you can! ;)
BEQ.W L00401
SUBQ.w #2,D0 ; CTRL-R show last message
BEQ.W L003F6
SUBQ.w #2,D0 ; CTRL-T toggle expert mode
BEQ.W L003F1
SUB.w #$10,D0 ; $ show inpack (wizard only)
BEQ.W show_inpack
SUB.w #$0A,D0 ; . rest
BEQ.W L003F8
SUB.w #$0E,D0 ; < go up
BEQ.W L003E9
SUBQ.w #2,D0 ; > go down
BEQ.W L003E8
SUBQ.w #1,D0 ; ? help page
BEQ.W L003EA
SUBQ.w #3,D0 ; SHIFT-B
BEQ.W L003D7
SUBQ.w #1,D0 ; SHIFT-C create object (if you can! ;)
BEQ.W L00400
SUBQ.w #1,D0 ; SHIFT-D show discovered items
BEQ.W L003F0
SUBQ.w #2,D0 ; SHIFT-F set macro
BEQ.W L003F4
SUBQ.w #2,D0 ; SHIFT-H
BEQ.W L003D7
SUBQ.w #2,D0 ; SHIFT-J
BEQ.W L003D7
SUBQ.w #1,D0 ; SHIFT-K
BEQ.W L003D7
SUBQ.w #1,D0 ; SHIFT-L
BEQ.W L003D7
SUBQ.w #2,D0 ; SHIFT-N
BEQ.W L003D7
SUBQ.w #2,D0 ; SHIFT-P put off ring
BEQ.W L003E4
SUBQ.w #1,D0 ; SHIFT-Q quit game
BEQ.W L003DB
SUBQ.w #1,D0 ; SHIFT-R put on ring
BEQ.W L003E5
SUBQ.w #1,D0 ; SHIFT-S save game
BEQ.W L003E6
SUBQ.w #1,D0 ; SHIFT-T put off armor
BEQ.W L003E3
SUBQ.w #1,D0 ; SHIFT-U
BEQ.W L003D7
SUBQ.w #2,D0 ; SHIFT-W put on armor
BEQ.W L003E2
SUBQ.w #2,D0 ; SHIFT-Y
BEQ.W L003D7
SUBQ.w #5,D0 ; ^ = search for traps in one direction
BEQ.W L003F9
SUBQ.w #4,D0 ; b move diagonal
BEQ.W L003D6
SUBQ.w #1,D0 ; c call
BEQ.W L003E7
SUBQ.w #1,D0 ; d drop
BEQ.W L003DD
SUBQ.w #1,D0 ; e eat
BEQ.W L003E0
SUBQ.w #3,D0 ; h move left
BEQ.W L003D6
SUBQ.w #1,D0 ; i inventory
BEQ.W L003DC
SUBQ.w #1,D0 ; j move down
BEQ.W L003D6
SUBQ.w #1,D0 ; k move up
BEQ.W L003D6
SUBQ.w #1,D0 ; l move right
BEQ.W L003D6
SUBQ.w #2,D0 ; n move diagonal
BEQ.W L003D6
SUBQ.w #1,D0 ; o options
BEQ.W L003FC
SUBQ.w #2,D0 ; q quaff
BEQ.W L003DE
SUBQ.w #1,D0 ; r read
BEQ.W L003DF