Go to most recent revision | Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
1812 | yogev_ezra | 1 | ; -------------------------------------------------------------------------- |
2 | ; FILE: TSrScan.Asm |
||
3 | ; DATE: October 11, 2008 |
||
4 | ; -------------------------------------------------------------------------- |
||
5 | |||
6 | ; -------------------------------------------------------------------------- |
||
7 | ; Input: |
||
8 | ; AL = character from QUAD array |
||
9 | ; -------------------------------------------------------------------------- |
||
10 | align PROC_ALIGN |
||
11 | TSrScan_SetCosmosAttr: |
||
12 | push ecx |
||
13 | |||
14 | mcOnRegEqu al, CHAR_ASTERISK, .attr_star |
||
15 | mcOnRegEqu al, CHAR_BLACK_HOLE, .attr_bhole |
||
16 | mcOnRegEqu al, CHAR_COMMANDER, .attr_klingon |
||
17 | mcOnRegEqu al, CHAR_ENTERPRISE, .attr_ship |
||
18 | mcOnRegEqu al, CHAR_FQUEENE, .attr_ship |
||
19 | mcOnRegEqu al, CHAR_KLINGON, .attr_klingon |
||
20 | mcOnRegEqu al, CHAR_PLANET, .attr_planet |
||
21 | mcOnRegEqu al, CHAR_ROMULAN, .attr_romulan |
||
22 | mcOnRegEqu al, CHAR_SCOM, .attr_klingon |
||
23 | mcOnRegEqu al, CHAR_STARBASE, .attr_base |
||
24 | mcOnRegEqu al, CHAR_THING, .attr_thing |
||
25 | mcOnRegEqu al, CHAR_THOLIAN, .attr_tholian |
||
26 | mcOnRegEqu al, CHAR_WEB, .attr_web |
||
27 | |||
28 | mov cl, ATTR_COSMOS |
||
29 | jmp .apply |
||
30 | |||
31 | .attr_star: |
||
32 | mov cl, ATTR_STAR |
||
33 | jmp .apply |
||
34 | |||
35 | .attr_bhole: |
||
36 | mov cl, ATTR_BLACK_HOLE |
||
37 | jmp .apply |
||
38 | |||
39 | .attr_klingon: |
||
40 | mov cl, ATTR_KLINGON |
||
41 | jmp .apply |
||
42 | |||
43 | .attr_ship: |
||
44 | mov cl, ATTR_SHIP |
||
45 | jmp .apply |
||
46 | |||
47 | .attr_planet: |
||
48 | mov cl, ATTR_PLANET |
||
49 | jmp .apply |
||
50 | |||
51 | .attr_romulan: |
||
52 | mov cl, ATTR_ROMULAN |
||
53 | jmp .apply |
||
54 | |||
55 | .attr_base: |
||
56 | mov cl, ATTR_BASE |
||
57 | jmp .apply |
||
58 | |||
59 | .attr_thing: |
||
60 | mov cl, ATTR_BLACK_HOLE |
||
61 | jmp .apply |
||
62 | |||
63 | .attr_tholian: |
||
64 | mov cl, ATTR_THOLIAN |
||
65 | jmp .apply |
||
66 | |||
67 | .attr_web: |
||
68 | mov cl, ATTR_WEB |
||
69 | |||
70 | .apply: |
||
71 | call TConsole_SetAttr |
||
72 | pop ecx |
||
73 | ret |
||
74 | |||
75 | ; -------------------------------------------------------------------------- |
||
76 | ; Input: |
||
77 | ; EAX = row index from 1 to 10 |
||
78 | ; -------------------------------------------------------------------------- |
||
79 | align PROC_ALIGN |
||
80 | TSrScan_CramSpaceRow: |
||
81 | dec eax |
||
82 | imul eax, 10 |
||
83 | |||
84 | mcLoadGameDataPtr edx |
||
85 | lea esi, [edx + eax + TREKDATA.QUAD] |
||
86 | mcLoad8bitsToReg32 ecx, 10 |
||
87 | |||
88 | .dump_sector: |
||
89 | push ecx |
||
90 | |||
91 | lodsb |
||
92 | call TSrScan_SetCosmosAttr |
||
93 | call TConsole_PutChar |
||
94 | mov al, CHAR_BLANK |
||
95 | call TConsole_PutChar |
||
96 | |||
97 | pop ecx |
||
98 | loop .dump_sector |
||
99 | ret |
||
100 | |||
101 | ; -------------------------------------------------------------------------- |
||
102 | ; Input: |
||
103 | ; ECX = index of SRSCAN report item text |
||
104 | ; -------------------------------------------------------------------------- |
||
105 | align PROC_ALIGN |
||
106 | TSrScan_Helper1: |
||
107 | call TConsole_Cram |
||
108 | mov cl, ATTR_REPORT_VALUE |
||
109 | call TConsole_SetAttr |
||
110 | mcLoadGameDataPtr ebx |
||
111 | ret |
||
112 | |||
113 | ; -------------------------------------------------------------------------- |
||
114 | align PROC_ALIGN |
||
115 | TSrScan_PrintTubesInfo: |
||
116 | mov ecx, 705 |
||
117 | call TConsole_Cram |
||
118 | |||
119 | mcLoadGameDataPtr esi |
||
120 | movzx eax, [esi + TREKDATA.NPTUBES] |
||
121 | call TConsole_CramInt |
||
122 | |||
123 | mcLoadGameDataPtr esi |
||
124 | cmp [esi + TREKDATA.QTORPS], 0 |
||
125 | je .close_bracket |
||
126 | cmp [esi + TREKDATA.TORPS], 0 |
||
127 | je .close_bracket |
||
128 | |||
129 | mov ecx, 706 |
||
130 | call TConsole_Cram |
||
131 | |||
132 | .close_bracket: |
||
133 | mov al, ')' |
||
134 | call TConsole_PutChar |
||
135 | ret |
||
136 | |||
137 | ; -------------------------------------------------------------------------- |
||
138 | ; Input: |
||
139 | ; EAX = row index from 1 to 10 |
||
140 | ; -------------------------------------------------------------------------- |
||
141 | align PROC_ALIGN |
||
142 | TSrScan_CramStatusRow: |
||
143 | mov cl, ATTR_REPORT_TEXT |
||
144 | call TConsole_SetAttr |
||
145 | |||
146 | mcOnRegEqu eax, 1, .print_stardate |
||
147 | mcOnRegEqu eax, 2, .print_condition |
||
148 | mcOnRegEqu eax, 3, .print_position |
||
149 | mcOnRegEqu eax, 4, .print_lsupport |
||
150 | mcOnRegEqu eax, 5, .print_warp |
||
151 | mcOnRegEqu eax, 6, .print_energy |
||
152 | mcOnRegEqu eax, 7, .print_torpedoes |
||
153 | mcOnRegEqu eax, 8, .print_shields |
||
154 | mcOnRegEqu eax, 9, .print_klingons |
||
155 | ; |
||
156 | ; Time left |
||
157 | ; |
||
158 | mcLoad8bitsToReg32 ecx, 103 |
||
159 | call TSrScan_Helper1 |
||
160 | |||
161 | fld [ebx + TREKDATA.REMTIME] |
||
162 | mov cl, 2 |
||
163 | call TConsole_CramFloat |
||
164 | jmp .done |
||
165 | |||
166 | .print_stardate: |
||
167 | mcLoad8bitsToReg32 ecx, 94 |
||
168 | call TSrScan_Helper1 |
||
169 | |||
170 | fld [ebx + TREKDATA.DATE] |
||
171 | mov cl, 1 |
||
172 | call TConsole_CramFloat |
||
173 | jmp .done |
||
174 | |||
175 | .print_condition: |
||
176 | mcLoad8bitsToReg32 ecx, 95 |
||
177 | call TSrScan_Helper1 |
||
178 | |||
179 | cmp [ebx + TREKDATA.CONDIT], CONDITION_DOCKED |
||
180 | je .do_condition |
||
181 | |||
182 | push ebx |
||
183 | call TCommon_NewCondition |
||
184 | pop ebx |
||
185 | |||
186 | .do_condition: |
||
187 | movzx eax, [ebx + TREKDATA.CONDIT] |
||
188 | mov esi, glb_AttrCondition |
||
189 | mov cl, [esi + eax - 1] |
||
190 | call TConsole_SetAttr |
||
191 | |||
192 | lea ecx, [eax + 103] |
||
193 | call TConsole_Cram |
||
194 | jmp .done |
||
195 | |||
196 | .print_position: |
||
197 | mcLoad8bitsToReg32 ecx, 96 |
||
198 | call TSrScan_Helper1 |
||
199 | |||
200 | mov al, [ebx + TREKDATA.QUADX] |
||
201 | mov dl, [ebx + TREKDATA.QUADY] |
||
202 | mcZeroBits ecx |
||
203 | push ebx |
||
204 | call TConsole_CramLoc |
||
205 | |||
206 | mov al, ',' |
||
207 | call TConsole_PutChar |
||
208 | pop ebx |
||
209 | |||
210 | mov al, [ebx + TREKDATA.SECTX] |
||
211 | mov dl, [ebx + TREKDATA.SECTY] |
||
212 | mcZeroBits ecx |
||
213 | call TConsole_CramLoc |
||
214 | jmp .done |
||
215 | |||
216 | .print_lsupport: |
||
217 | mcLoad8bitsToReg32 ecx, 97 |
||
218 | call TSrScan_Helper1 |
||
219 | |||
220 | mov cl, DEV_LIFE_SUPPORT |
||
221 | call TArray_IsDamaged |
||
222 | jc .L44 |
||
223 | |||
224 | mcLoad8bitsToReg32 ecx, 108 |
||
225 | call TConsole_Cram |
||
226 | jmp .done |
||
227 | |||
228 | .L44: |
||
229 | cmp [ebx + TREKDATA.CONDIT], CONDITION_DOCKED |
||
230 | jne .L45 |
||
231 | |||
232 | mcLoad8bitsToReg32 ecx, 109 |
||
233 | call TConsole_Cram |
||
234 | jmp .done |
||
235 | |||
236 | .L45: |
||
237 | mcLoad8bitsToReg32 ecx, 110 |
||
238 | push ebx |
||
239 | call TConsole_Cram |
||
240 | pop ebx |
||
241 | |||
242 | fld [ebx + TREKDATA.LSUPRES] |
||
243 | mov cl, 2 |
||
244 | mov dl, 4 |
||
245 | call TConsole_CramFloatWidth |
||
246 | jmp .done |
||
247 | |||
248 | .print_warp: |
||
249 | mcLoad8bitsToReg32 ecx, 98 |
||
250 | call TSrScan_Helper1 |
||
251 | |||
252 | fld [ebx + TREKDATA.WARPFAC] |
||
253 | mov cl, 1 |
||
254 | call TConsole_CramFloat |
||
255 | jmp .done |
||
256 | |||
257 | .print_energy: |
||
258 | mcLoad8bitsToReg32 ecx, 99 |
||
259 | call TSrScan_Helper1 |
||
260 | |||
261 | fld [ebx + TREKDATA.ENERGY] |
||
262 | mov cl, 2 |
||
263 | call TConsole_CramFloat |
||
264 | jmp .done |
||
265 | |||
266 | .print_torpedoes: |
||
267 | mcLoad8bitsToReg32 ecx, 100 |
||
268 | call TSrScan_Helper1 |
||
269 | |||
270 | movzx eax, [ebx + TREKDATA.TORPS] |
||
271 | call TConsole_CramInt |
||
272 | call TSrScan_PrintTubesInfo |
||
273 | jmp .done |
||
274 | |||
275 | .print_shields: |
||
276 | mcLoad8bitsToReg32 ecx, 101 |
||
277 | call TSrScan_Helper1 |
||
278 | |||
279 | mov cl, DEV_SHIELDS |
||
280 | call TArray_IsDamaged |
||
281 | jc .shields_damaged |
||
282 | |||
283 | movzx ecx, [ebx + TREKDATA.SHLDUP] |
||
284 | add cl, 120 |
||
285 | |||
286 | .cram_shields_state: |
||
287 | push ebx |
||
288 | call TConsole_Cram |
||
289 | pop ebx |
||
290 | |||
291 | fld [ebx + TREKDATA.SHLD] |
||
292 | fld [ebx + TREKDATA.INSHLD] |
||
293 | fdivp |
||
294 | fld [glb_dbl_100] |
||
295 | fmulp |
||
296 | frndint |
||
297 | call TCommon_FP_Truncate |
||
298 | push ebx |
||
299 | call TConsole_CramInt |
||
300 | |||
301 | mcLoad8bitsToReg32 ecx, 111 |
||
302 | call TConsole_Cram |
||
303 | |||
304 | pop ebx |
||
305 | fld [ebx + TREKDATA.SHLD] |
||
306 | frndint |
||
307 | call TCommon_FP_Truncate |
||
308 | call TConsole_CramInt |
||
309 | |||
310 | mcLoad8bitsToReg32 ecx, 112 |
||
311 | call TConsole_Cram |
||
312 | jmp .done |
||
313 | |||
314 | .shields_damaged: |
||
315 | mcLoad8bitsToReg32 ecx, 119 |
||
316 | jmp .cram_shields_state |
||
317 | |||
318 | .print_klingons: |
||
319 | mcLoad8bitsToReg32 ecx, 102 |
||
320 | call TSrScan_Helper1 |
||
321 | |||
322 | movzx eax, [ebx + TREKDATA.REMKL] |
||
323 | call TConsole_CramInt |
||
324 | |||
325 | .done: |
||
326 | ret |
||
327 | |||
328 | ; -------------------------------------------------------------------------- |
||
329 | ; STATUS |
||
330 | ; -------------------------------------------------------------------------- |
||
331 | align PROC_ALIGN |
||
332 | TSrScan_Status: |
||
333 | call TConsole_ScrollUp |
||
334 | |||
335 | mcLoad1 eax |
||
336 | mcLoad8bitsToReg32 ecx, 10 |
||
337 | |||
338 | .dump_row: |
||
339 | push eax ecx |
||
340 | |||
341 | call TSrScan_CramStatusRow |
||
342 | call TConsole_ScrollUp |
||
343 | |||
344 | pop ecx eax |
||
345 | inc eax |
||
346 | loop .dump_row |
||
347 | |||
348 | call TConsole_ScrollUp |
||
349 | ret |
||
350 | |||
351 | ; -------------------------------------------------------------------------- |
||
352 | ; REQUEST |
||
353 | ; -------------------------------------------------------------------------- |
||
354 | align PROC_ALIGN |
||
355 | TSrScan_Request: |
||
356 | |||
357 | .L301: |
||
358 | call TCmdBuf_Scan |
||
359 | cmp [ebx + TCmdBuf.cmdbuf_KEY], CMD_TOKEN_ALPHA |
||
360 | je .L303 |
||
361 | |||
362 | .L302: |
||
363 | mcLoad8bitsToReg32 ecx, 115 |
||
364 | call TGame_Prompt |
||
365 | jmp .L301 |
||
366 | |||
367 | .L303: |
||
368 | mcLoad8bitsToReg32 edx, 1 |
||
369 | |||
370 | .check_cmd: |
||
371 | mcLoad8bitsToReg32 ecx, 122 |
||
372 | add ecx, edx |
||
373 | push edx |
||
374 | call TCmdBuf_Crop |
||
375 | pop edx |
||
376 | jc .row_in_EDX |
||
377 | |||
378 | inc edx |
||
379 | cmp edx, 10 |
||
380 | jbe .check_cmd |
||
381 | ; |
||
382 | ; List possible request items |
||
383 | ; |
||
384 | call TConsole_ScrollUp |
||
385 | call TConsole_SetGameMsgAttr |
||
386 | mcLoad8bitsToReg32 ecx, 116 |
||
387 | call TConsole_Prout |
||
388 | mcLoad8bitsToReg32 ecx, 117 |
||
389 | call TConsole_Prout |
||
390 | mcLoad8bitsToReg32 ecx, 118 |
||
391 | call TConsole_Prout |
||
392 | call TConsole_ScrollUp |
||
393 | jmp .L302 |
||
394 | |||
395 | .row_in_EDX: |
||
396 | push edx |
||
397 | call TConsole_ScrollUp |
||
398 | pop eax |
||
399 | ; |
||
400 | ; Due to mapping we need to swap places of |
||
401 | ; TIME and TORPEDOES request. Basic logic here as follows: |
||
402 | ; |
||
403 | ; IF (EAX == 7) THEN EAX=10 |
||
404 | ; IF (EAX == 10) THEN EAX=7 |
||
405 | ; |
||
406 | mcOnRegEqu eax, 7, .load_10 |
||
407 | mcOnRegEqu eax, 10, .load_7 |
||
408 | |||
409 | .dump_info: |
||
410 | call TSrScan_CramStatusRow |
||
411 | call TConsole_ScrollUp |
||
412 | call TConsole_ScrollUp |
||
413 | ret |
||
414 | |||
415 | .load_7: |
||
416 | sub eax, 3 |
||
417 | jmp .dump_info |
||
418 | |||
419 | .load_10: |
||
420 | add eax, 3 |
||
421 | jmp .dump_info |
||
422 | |||
423 | ; -------------------------------------------------------------------------- |
||
424 | ; SRSCAN |
||
425 | ; -------------------------------------------------------------------------- |
||
426 | virtual at 0 |
||
427 | loc24: |
||
428 | .bRightSide BOOL ? |
||
429 | .nRow INDEX ? |
||
430 | .size = $ |
||
431 | end virtual |
||
432 | ; -------------------------------------------------------------------------- |
||
433 | align PROC_ALIGN |
||
434 | TSrScan_Main: |
||
435 | mcBeginLocals loc24.size |
||
436 | |||
437 | mov cl, DEV_SR_SENSORS |
||
438 | call TArray_IsDamaged |
||
439 | jnc .proceed |
||
440 | |||
441 | mcLoadGameDataPtr ebx |
||
442 | cmp [ebx + TREKDATA.CONDIT], CONDITION_DOCKED |
||
443 | jne .not_available |
||
444 | |||
445 | .proceed: |
||
446 | mcLoad1 eax |
||
447 | mcStoreLocal loc24.bRightSide, eax |
||
448 | mcStoreLocal loc24.nRow, eax |
||
449 | |||
450 | call TCmdBuf_Scan |
||
451 | cmp [ebx + TCmdBuf.cmdbuf_KEY], CMD_TOKEN_EOL |
||
452 | je .L3 |
||
453 | |||
454 | mcLoad8bitsToReg32 ecx, 122 |
||
455 | call TCmdBuf_Crop |
||
456 | jnc .L3 |
||
457 | |||
458 | dec [esp + loc24.bRightSide] |
||
459 | |||
460 | .L3: |
||
461 | mcLoadLocal ecx, loc24.nRow |
||
462 | mcLoadGameDataPtr ebx |
||
463 | mcLoadMember al, TREKDATA.QUADX |
||
464 | mcLoadMember dl, TREKDATA.QUADY |
||
465 | call TArray_SetStarChartValue |
||
466 | call TArray_SetScanned |
||
467 | |||
468 | call TConsole_ScrollUp |
||
469 | |||
470 | mov cl, ATTR_SCAN_SCALE |
||
471 | call TConsole_SetAttr |
||
472 | mcLoad8bitsToReg32 ecx, 113 |
||
473 | call TConsole_Prout |
||
474 | |||
475 | .dump_row: |
||
476 | mov cl, ATTR_SCAN_SCALE |
||
477 | call TConsole_SetAttr |
||
478 | |||
479 | mcLoadLocal eax, loc24.nRow |
||
480 | mov cl, 3 |
||
481 | call TConsole_CramIntWidth |
||
482 | |||
483 | mov al, CHAR_BLANK |
||
484 | call TConsole_PutChar |
||
485 | |||
486 | mcLoadLocal eax, loc24.nRow |
||
487 | call TSrScan_CramSpaceRow |
||
488 | |||
489 | cmp [esp + loc24.bRightSide], 0 |
||
490 | je .next_row |
||
491 | |||
492 | mcLoadLocal eax, loc24.nRow |
||
493 | call TSrScan_CramStatusRow |
||
494 | |||
495 | .next_row: |
||
496 | call TConsole_ScrollUp |
||
497 | |||
498 | inc [esp + loc24.nRow] |
||
499 | cmp [esp + loc24.nRow], 10 |
||
500 | jbe .dump_row |
||
501 | |||
502 | mov cl, ATTR_SCAN_SCALE |
||
503 | call TConsole_SetAttr |
||
504 | mcLoad8bitsToReg32 ecx, 113 |
||
505 | call TConsole_Prout |
||
506 | jmp .done |
||
507 | |||
508 | .not_available: |
||
509 | call TConsole_SetGameMsgAttr |
||
510 | call TConsole_ScrollUp |
||
511 | mcLoad8bitsToReg32 ecx, 114 |
||
512 | call TConsole_Prout |
||
513 | |||
514 | .done: |
||
515 | call TConsole_ScrollUp |
||
516 | mcEndLocals loc24.size |
||
517 | ret |
||
518 | |||
519 | ; --- EOF --- |