forked from KolibriOS/kolibrios
Revert addition of 'StarTrek' - not relevant for KolibriOS.
git-svn-id: svn://kolibrios.org@1813 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
ea96aec626
commit
95261888a5
Binary file not shown.
@ -1,257 +0,0 @@
|
||||
|
||||
* ----------------------------------------------- *
|
||||
* THIS DOCUMENT IS LOOKING BEST WITH COURIER FONT *
|
||||
* ----------------------------------------------- *
|
||||
|
||||
|
||||
CONTENTS OF THIS FOLDER:
|
||||
- README.TXT - THIS FILE
|
||||
- STARTREK32.EXE - GAME EXECUTABLE FILE
|
||||
- STARTREK.DOC - ORIGINAL GAME INSTRUCTIONS
|
||||
- MSGTABLE.TXT - GAME MESSAGES (ENCRYPTED)
|
||||
- DO NOT EDIT MSG TABLE - REMINDER NOT TO OPEN IT IN EDITOR
|
||||
|
||||
|
||||
1. MODIFICATIONS TO ORIGINAL VERSION OF THIS GAME
|
||||
===================================================
|
||||
|
||||
|
||||
WHEN I STARTED TESTING THE GAME, I NOTICED THAT NO MATTER HOW HARD
|
||||
I AM TRYING TO BEAT THE 'EMERITUS' LEVEL - THERE IS SIMPLY NOT MUCH
|
||||
LUCK ON MY SIDE. WELL, I DECIDED TO ADD SOME POWER-UPS TO REMEDY
|
||||
THIS SITUATION.
|
||||
|
||||
|
||||
1.1 WHEN 'DOCK' COMMAND IS EXECUTED SOMETIMES MORE PHOTON
|
||||
LAUNCHERS ARE ADDED, SO SHIP CAN FIRE MORE PHOTON TORPEDOES IN ONE
|
||||
BURST. THIS EVENT HAPPENS ONLY ONCE PER GAME (FOR NOW).
|
||||
|
||||
THE NUMBER OF TORPEDOES PER BURST IS INDICATED ON 'TORPEDOES' LINE
|
||||
IN SHORT RANGE SCAN REPORT. MAXIMUM NUMBER OF ADDED LAUNCHERS IS
|
||||
THREE, SO IN ALL SHIP CAN HAVE UP TO SIX TORPEDOES FIRED PER BURST!
|
||||
|
||||
|
||||
1.2 WHEN 'DOCK' COMMAND IS EXECUTED IT IS POSSIBLE SOMETIMES TO
|
||||
RECEIVE QUANTUM TORPEDOES INSTEAD OF NORMAL ONES. THESE ARE NEW
|
||||
WARHEADS DESIGNED BY STARFLEET ENGINEER CORPS. THE QUANTUM CHARGES
|
||||
DO NOT SUFFER THE LOSS OF TARGETING WHEN PASSING THROUGH SHIELDS AS
|
||||
MUCH AS NORMAL TORPEDOES. AND OF COURSE, THEY PACK QUITE A PUNCH!
|
||||
|
||||
"ENTERPRISE" WILL RECEIVE SIXTEEN QUANTUM CHARGES AND "FAERIE
|
||||
QUEENE" WILL GET EIGHT. THESE CHARGES MUST BE EXPENDED BEFORE THE
|
||||
NEXT DOCKING PROCEDURE, OTHERWISE THE TORPEDOES WILL NOT BE
|
||||
REFILLED BY THE BASE. SO, DO NOT SAVE YOUR QUANTUM TORPEDOERS! GET
|
||||
INTO SOME QUADRANT AND MAKE A SHOOTING GALLERY OUT OF POOR SUCKERS!
|
||||
ESPECIALLY IF YOU HAVE SIX PHOTON TUBES.
|
||||
|
||||
|
||||
I WAS THINKING TO ADD SOME NEW WAYS TO GATHER ENERGY IN GALAXY, BUT
|
||||
SO FAR NOTHING COMES TO MIND. IF YOU HAVE ANY IDEAS ON THAT I WILL
|
||||
BE GLAD TO HEAR IT.
|
||||
|
||||
|
||||
1.3 ANOTHER NICE TO HAVE MODIFICATION IS THAT OUTPUT HAS TRUE
|
||||
COLOURS. THESE COLOURS ARE NOT STANDARD WIN32 CONSOLE COLOURS,
|
||||
BUT IN FACT, MY CONSOLE WINDOW IS A REAL WIN32 WINDOW, SIMULATING A
|
||||
CONSOLE I/O.
|
||||
|
||||
|
||||
1.4 SOME DELAY ADDED WHEN OUTPUTTING LARGE AMOUNTS OF DATA - IT
|
||||
IMPROVES READABILITY, SINCE I HAVE NOT IMPLEMENTED THE SCROLLING OF
|
||||
MY CONSOLE WINDOW (FOR NOW).
|
||||
|
||||
|
||||
1.5. NEW 'LOG' COMMAND ADDED INTO THE GAME. IT ALLOWS SAVING ALL
|
||||
GAME I/O INTO THE FILE CALLED 'STARTREK.LOG'. THIS FILE IS RE-
|
||||
CREATED EACH GAME, SO IF YOU NEED TO ANALYSE ANY PREVIOUS GAMES YOU
|
||||
HAVE TO RENAME THAT FILE AFTER THE GAME.
|
||||
|
||||
|
||||
1.6 SINCE I HAVE TRUE COLOURS IN THE GAME I DECIDED TO IMPROVE
|
||||
THE GALAXY CHART. ALL QUADRANTS WHERE 'SRSCAN' COMMAND WAS GIVEN
|
||||
WILL BE HIGHLIGHTED WITH DIFFERENT COLOUR. IT MAY BE USEFUL IN
|
||||
LOCATING A PLANET. ALSO, THE SHIP'S QUADRANT IS HIGHLIGHTED TOO.
|
||||
|
||||
|
||||
|
||||
2. SOME STRATEGY HINTS
|
||||
======================
|
||||
|
||||
|
||||
"STAR TREK" IS A GAME OF STRATEGY. I GOT THAT WHILE PLAYING
|
||||
IT DURING MY TESTING PHASE - I WAS PLAYING FOR HOURS EVERY DAY!
|
||||
|
||||
I GOT A LOT OF BUGS FIXED, AND AT THE SAME TIME I GOT SOME INSIGHTS
|
||||
INTO THE GAME. MOST OF THESE CAME WITH A KNOWLEDGE OF READING THE
|
||||
SOURCE CODE FROM PDP-11. HOWEVER, I CAN ADD SOME OF MY OWN. AND,
|
||||
OF COURSE, SOME LUCK IS MUCH NEEDED, ESPECIALLY ON THE "EMERITUS"!
|
||||
|
||||
SO, LET'S BEGIN!..
|
||||
|
||||
|
||||
2.1 IMAGINE THAT YOU HEAR ON SUBSPACE, THAT A BASE IS UNDER
|
||||
ATTACK AND YOU REALISE THAT TO GET THERE AT WARP 5 OR EVEN AT WARP
|
||||
6 IS NOT POSSIBLE. YOU HAVE THE ENERGY, BUT THE MOVE WITH WARPS
|
||||
OVER 6 WILL DAMAGE THE ENGINES AND YOU'LL GET STRANDED OR YOU'LL
|
||||
HAVE TO DRAG AT WARP 4. IN SUCH A CASE I USE WARP 8, BUT I MAKE
|
||||
SHORT TRIPS - EACH TRIP IS NO LONGER THAN 5 SECTORS. THERE IS A
|
||||
PROBABILITY OF DAMAGING THE ENGINES, BUT THAT PROBABILITY IS MUCH
|
||||
LOWER FOR SHORT JUMPS. ALSO, GO WITH SHIELDS DOWN TO SAVE ENERGY.
|
||||
IF YOU GET TRACTORED - YOU'LL HAVE A CHANCE TO RAISE SHIELDS FOR
|
||||
BATTLE. IN FACT, ALWAYS LOWER SHIELDS, WHEN BATTLE IS OVER.
|
||||
|
||||
|
||||
2.2 IF YOU REALISE THAT BASE WILL BE DESTROYED AND YOU STILL IN
|
||||
A NEIGHBOURING QUADRANT AND NOT ENOUGH TIME TO GET TO BASE - 'HELP'
|
||||
COMMAND CAN BE USED TO JUMP STRAIGHT INTO DOCK. HOWEVER, THIS MAY
|
||||
END BADLY, BECAUSE 'HELP' COMMAND IS PRONE TO RE-MATERIALIZATION
|
||||
FAILURE AND YOU'LL LOSE THE GAME. ON THE OTHER HAND, JAMES T. KIRK
|
||||
LOVES TO RISK! AND YOU ARE BECOME HIM, REMEMBER?..
|
||||
|
||||
|
||||
2.3 WHEN YOU ENTER THE QUADRANT WITH ENEMIES - THEY ATTACK
|
||||
RIGHT AWAY. YOU CAN ATTACK WHEN THEIR ATTACK IS OVER, HOWEVER, YOU
|
||||
HAVE ONE CHANCE TO MOVE BEFORE ATTACKING, SO USE IT WISELY. FOR
|
||||
EXAMPLE, YOU CAN FLY INTO THE MIDDLE OF ENEMIES, SO YOUR WEAPONS
|
||||
WOULD BE MORE EFFECTIVE ON THE SHORT DISTANCE. IT WORKS FOR BOTH
|
||||
PHASERS (LESS ENERGY SPENT ON A BURST) AND TORPEDOES (PRECISION AND
|
||||
HIT ENERGY WILL BE INTENSIFIED).
|
||||
|
||||
|
||||
2.4 SIMPLE FACT: WHEN STAR IS HIT BY A TORPEDO - IT BECOMES A
|
||||
NOVA. NOVA DESTROYS (OR HEAVILY DAMAGES) ALL OBJECTS IN 8 ADJACENT
|
||||
SECTORS. YOU CAN USE IT IN BATTLE. IF YOU HAVE ONLY 2 TORPEDOES
|
||||
LEFT, BUT THERE ARE 5 KLINGONS IN THE QUADRANT, HOWEVER, THESE
|
||||
ENEMIES ARE ADJACENT TO TWO STARS. THEY ARE UNLUCKY ONES! FLY INTO
|
||||
A POSITION, WHERE YOUR TORPEDOES WILL SURELY HIT THOSE STARS AND
|
||||
FIRE! ENEMIES WILL BE DESTROYED (MOST LIKELY). THERE IS A SMALL
|
||||
PROBABILITY THAT NOVA CAN BECOME A SUPERNOVA - THAT WOULD BE BAD. I
|
||||
ONCE EXPERIENCED THAT IN MY TESTING.
|
||||
|
||||
|
||||
2.5 BEWARE OF ROMULANS! - THEY HAVE MORE POWER THAN MOST
|
||||
KLINGONS. ALSO, THEY USUALLY FIRE TORPEDOES - NOT A GOOD PROSPECT.
|
||||
TRY TO KILL OFF ROMULANS (AND COMMANDERS) FIRST WHEN IN BATTLE.
|
||||
|
||||
|
||||
2.6 ALWAYS TRY TO ENTER THE CORNER SECTOR OF A QUADRANT WITH
|
||||
ENEMIES OR CLOSE TO CORNER SECTOR. IT MINIMIZES THE ENEMY POWER
|
||||
AND THEY CANNOT INFLICT AS MUCH DAMAGE AS IF YOU ENTER THE SECTOR
|
||||
5-5. ALSO, IF YOU AT CORNER SECTOR - IT KEEPS THE THOLIAN FROM
|
||||
MOVING AND WEAVING ITS WEB.
|
||||
|
||||
|
||||
2.7 SOMETIMES YOU NEED A QUICK SCAN OF THE GALAXY. IT CAN BE
|
||||
DONE WITHOUT TOO MUCH ENERGY SPENT ON FLIGHT. SIMPLY FLY INTO ANY
|
||||
CORNER OF THE QUADRANT AND THEN MOVE JUST ONE SECTOR TO GET TO THE
|
||||
ADJACENT QUADRANT AND GIVE BOTH 'SRSCAN' AND 'LRSCAN' COMMANDS. BY
|
||||
DOING IT ONLY THREE TIMES (3 SECTORS TRAVELLED) YOU CAN SCAN FOUR
|
||||
QUADRANTS ON SHORT RANGE AND TWELVE ON LONG RANGE.
|
||||
|
||||
|
||||
2.8 AFTER THE BATTLE ALWAYS KEEP YOUR SHIELDS ON FULL OR CLOSE
|
||||
TO FULL. YOU CAN BE TRACTORED BY A COMMANDER AT ANY TIME AND YOU
|
||||
WILL NOT BE ABLE TO TRANSFER THE ENERGY - ONLY TO RAISE SHIELDS.
|
||||
|
||||
|
||||
2.9 HOW TO FIGHT A LOT OF KLINGONS? IMAGINE THAT YOU ENTER A
|
||||
QUADRANT AND IT HAS SEVEN KLINGONS OR MORE. EXPERIENCE SHOWS THAT
|
||||
TO KILL ALL ENEMIES WITH PHASER IS NOT FEASIBLE WITHOUT OVERHEATING
|
||||
PHASERS. IN THIS CASE THE MANUAL PHASER FIRE WILL HELP. USING
|
||||
THIS METHOD YOU CAN SEE HOW MUCH ENERGY IS NEEDED TO KILL EACH
|
||||
ENEMY. SIMPLY ENTER FOR EACH ENEMY SOME AMOUNT OF FIRE KEEPING IN
|
||||
MIND THAT PHASERS BEGIN OVERHEATING AT MORE THAN 1500 UNITS IN
|
||||
TOTAL. THE OVERHEATING IS HIGHLY RANDOM - I ONCE FIRED 2500 AT
|
||||
SUPER-COMMANDER IN A FAR DISTANCE (COULD NOT MOVE CLOSER) AND MY
|
||||
PHASERS WERE NOT OVERHEATED! SO, WHEN YOU ENTER THE MANUAL AMOUNTS
|
||||
FOR EACH ENEMY AND FIRE - IT WILL WEAKEN THE ENEMIES, SO THEY WILL
|
||||
NOT BE ABLE TO FIRE AS MUCH IN THEIR NEXT WAVE OF ATTACK. USUALLY,
|
||||
YOUR SECOND PHASER SHOT WILL KILL ALL SEVEN KLINGONS. YOUR RESULTS
|
||||
MAY VARY, HOWEVER! THAT'S WHY THIS GAME IS SO ADDICTIVE! ANYTHING
|
||||
CAN HAPPEN DURING BATTLE!
|
||||
|
||||
|
||||
2.10 IF THE ENEMY IS CLOSE TO BLACK HOLE (PREFERABLY 1 SECTOR
|
||||
DISTANCE) - IT IS POSSIBLE TO DISPLACE THAT ENEMY INTO A BLACK HOLE
|
||||
WITH A TORPEDO FIRED ON THE SAME VECTOR. I ONCE WAS IN A SITUATION
|
||||
DEPICTED BELOW AND WAS ABLE TO KILL SUPER-COMMANDER WITH JUST ONE
|
||||
NORMAL TORPEDO!
|
||||
|
||||
|
||||
. E . . S @ . . .
|
||||
|
||||
|
||||
|
||||
3. NEED FOR IMPROVEMENT
|
||||
=======================
|
||||
|
||||
|
||||
3.1 I WOULD BE HAPPY TO HEAR SOME NEW IDEAS ABOUT THE GAME. YOU
|
||||
CAN E-MAIL ME (asmguru62@hotmail.com) TO GIVE AN INSIGHT OR ADVICE.
|
||||
|
||||
|
||||
3.2 I WAS NOT HAPPY TO DISCOVER (READING THE SOURCE CODE) THAT
|
||||
COMMANDER'S TRACTOR BEAM WORKS ON A GREAT DISTANCES. BASICALLY,
|
||||
THE SHIP CAN BE PULLED FROM ONE CORNER OF THE GALAXY TO THE OTHER!!
|
||||
THAT DOES NOT SEEM LOGICAL TO ME. I WANTED TO ADJUST THE GAME, SO
|
||||
THE DISTANCE WILL BE A FACTOR, BUT I LEFT THAT AS IS - TO PRESERVE
|
||||
THE ORIGINAL IDEA FOR NOW.
|
||||
|
||||
|
||||
3.3 BUGS!! OF COURSE, I AM GLAD TO HEAR SOME BUG REPORTS. LET'S
|
||||
MAKE IT A NICE GAMING EXPERIENCE - 70s STYLE!.. DURING TESTING I
|
||||
HAVE SEEN SOME STRANGE ISSUES, HOWEVER, I WAS NOT ABLE TO REPRODUCE
|
||||
THESE IN A CONSISTENT MANNER.
|
||||
|
||||
|
||||
3.4 TAKE A LOOK AT POSITION BELOW:
|
||||
|
||||
1 2 3 4 5
|
||||
1 E * . . .
|
||||
2 . . . . .
|
||||
|
||||
TO MOVE TO SECTOR 2-2 THE SHIP NEEDS TO TRAVEL AT 45 DEGREE ANGLE
|
||||
DOWN AND TO THE RIGHT AND IT SEEMS LIKE NOTHING IN THE WAY. BEWARE
|
||||
OF SUCH CONDITION - IN MOST CASES THE SHIP WILL BE BLOCKED BY STAR
|
||||
AT SECTOR 1-2. I ANALYSED THE CODE AND IT SEEMS, WHEN SHIP MOVES,
|
||||
IT WILL APPROXIMATE ITS LOCATION TO THE NEAREST SECTOR WITH HALF
|
||||
SECTOR PRECISION. FOR EXAMPLE: SECTOR 1-1.5 WILL BE ROUNDED TO
|
||||
SECTOR 1-2 AND THIS WILL CAUSE COLLISION WITH OBJECT AT THAT SECTOR
|
||||
IF ANY. THAT SEEMS ILLOGICAL, AS SPOCK WOULD SAY. HALF OF THE
|
||||
SECTOR CANNOT BE COMPARED WITH THE SHIP'S LENGTH TO BE ABLE TO
|
||||
COLLIDE WITH ANYTHING. I ALSO, LEFT THAT FACT INTACT FROM ORIGINAL
|
||||
CODE. SIMPLY DO NOT PLOT YOUR COURSE TOO CLOSE TO OTHER OBJECTS.
|
||||
|
||||
THE SAME CONDITION EXISTS FOR TORPEDOES TOO, BECAUSE THE SAME CODE
|
||||
IS USED TO MOVE A TORPEDO.
|
||||
|
||||
|
||||
|
||||
4. FASM SOURCE CODE
|
||||
===================
|
||||
|
||||
|
||||
I HAVE INSERTED THE ORIGINAL COPYRIGHT NOTE FROM PDP-11 FORTRAN
|
||||
SOURCE. YOU CAN MODIFY THE CODE, BIT ONLY FOR FUN - NOT FOR PROFIT.
|
||||
|
||||
THE SOURCE CODE WAS NOT WRITTEN TO BE FAST. IT WAS WRITTEN TO MIMIC
|
||||
EXACTLY THE LOGIC OF FORTRAN SOURCE. PLEASE DO NOT ASK ME TO MAKE
|
||||
OPTIMIZATIONS IN THE CODE - IT WILL NEVER BE DONE. I USED MY OWN
|
||||
IDE FOR FASM TO CREATE THAT CODE. YOU CAN LOOK AT THE DATES IN
|
||||
FILES AND FIGURE OUT HOW MUCH TIME IT TOOK TO WRITE THAT CODE. THIS
|
||||
WAS MY THIRD (!) ATTEMPT TO RE-CREATE ONE OF MY FAVOURITE GAMES.
|
||||
|
||||
IN THE FIRST ATTEMPT I TRIED TO RE-DESIGN THE ORIGINAL SOURCE TO BE
|
||||
MORE STRUCTURED. NO NEED TO SAY - IT FAILED MISERABLY! THE LOGIC
|
||||
IN SOME CASES WAS LOST.
|
||||
|
||||
IN THE SECOND ATTEMPT I WROTE THE FASM CODE TO MIMIC FORTRAN CODE
|
||||
EXACTLY. HOWEVER, I FAILED TO SEE THAT THERE SHOULD BE TWO THREADS.
|
||||
ONE THREAD SHOULD RUN THE CONSOLE WINDOW AND THE OTHER ONE SHOULD
|
||||
DEAL WITH GAME LOGIC: QUESTIONS AND ANSWERS FROM CONSOLE.
|
||||
|
||||
WELL, THIRD TIME'S A CHARM!
|
||||
|
||||
|
||||
AsmGuru62
|
||||
August 23, 2009
|
File diff suppressed because it is too large
Load Diff
@ -1,182 +0,0 @@
|
||||
; --------------------------------------------------------------------------
|
||||
; Global variables
|
||||
; --------------------------------------------------------------------------
|
||||
|
||||
glb_GameThreadBusy BOOL 1
|
||||
glb_Instance HINSTANCE 0
|
||||
glb_Allocator HANDLE 0
|
||||
glb_MainWnd HWND 0
|
||||
glb_Font HFONT 0
|
||||
glb_FPU_Int32 INT32 0
|
||||
glb_Score INT32 0
|
||||
glb_CharSize rb SIZE.size
|
||||
glb_pConsole PTConsole 0
|
||||
glb_pCmdBuf PTCmdBuf 0
|
||||
glb_pRawMsgBuffer PCHAR 0
|
||||
glb_pMsgItems PPCHAR 0
|
||||
glb_NumMsgItems COUNT 0
|
||||
glb_pGameData PTGameData 0
|
||||
glb_pCommon PTCommon 0
|
||||
glb_pMersenne PTRandom 0
|
||||
glb_pLog PVOID 0
|
||||
glb_MOVED BYTE 0
|
||||
glb_LogEnabled BYTE 0
|
||||
glb_bEmExit BYTE 0
|
||||
glb_AttrCondition BYTE ATTR_COND_GREEN, ATTR_COND_RED, ATTR_COND_YELLOW, ATTR_COND_GREEN
|
||||
|
||||
glb_ObjectMap BYTE CHAR_ROMULAN, CHAR_KLINGON, CHAR_COMMANDER, \
|
||||
CHAR_SCOM, CHAR_ASTERISK, CHAR_PLANET, CHAR_STARBASE, \
|
||||
CHAR_BLACK_HOLE, CHAR_THOLIAN
|
||||
|
||||
glb_Plaque BYTE PLAQUE_END_OF_LINE,PLAQUE_END_OF_LINE,\
|
||||
PLAQUE_END_OF_LINE,PLAQUE_END_OF_LINE,\
|
||||
64,' ',50,'E',PLAQUE_END_OF_LINE,\
|
||||
38,' ',3,'E',22,' ',PLAQUE_STRING,6,'E : :',41,' ',1,':',2,' ',1,'E',PLAQUE_END_OF_LINE,\
|
||||
36,' ',2,'E',3,' ',3,'E',19,' ',PLAQUE_STRING,6,'E : :',19,' ',\
|
||||
PLAQUE_STRING,8,'NCC-1701',14,' ',PLAQUE_STRING,4,': E',PLAQUE_END_OF_LINE,\
|
||||
20,' ',16,'E',8,' ',15,'E',4,' ',PLAQUE_STRING,6,'E : :',41,' ',PLAQUE_STRING,3,': E',\
|
||||
PLAQUE_END_OF_LINE,\
|
||||
21,' ',1,'E',37,' ',1,'E',4,' ',48,'E',PLAQUE_END_OF_LINE,\
|
||||
22,' ',9,'E',15,' ',13,'E',17,' ',PLAQUE_STRING,4,'E E',PLAQUE_END_OF_LINE,\
|
||||
31,' ',7,'E',3,' ',5,'E',4,' ',1,'E',10,' ',1,'E',14,' ',PLAQUE_STRING,4,'E E',PLAQUE_END_OF_LINE,\
|
||||
38,' ',3,'E',11,' ',1,'E',10,' ',1,'E',12,' ',PLAQUE_STRING,4,'E E',PLAQUE_END_OF_LINE,\
|
||||
55,' ',1,'E',9,' ',1,'E',10,' ',PLAQUE_STRING,4,'E E',PLAQUE_END_OF_LINE,\
|
||||
57,' ',13,'E',6,' ',PLAQUE_STRING,4,'E E',PLAQUE_END_OF_LINE,\
|
||||
54,' ',3,'E',1,' ',1,':',11,' ',7,'E',2,' ',8,'E',PLAQUE_END_OF_LINE,\
|
||||
52,' ',1,':',1,'E',4,' ',1,':',17,' ',4,'E',7,' ',1,'E',PLAQUE_END_OF_LINE,\
|
||||
51,' ',PLAQUE_STRING,8,')-E -:',5,'-',23,' ',1,'E',PLAQUE_END_OF_LINE,\
|
||||
52,' ',1,':',1,'E',4,' ',1,':',28,' ',1,'E',PLAQUE_END_OF_LINE,\
|
||||
54,' ',2,'E',2,' ',1,':',20,' ',8,'E',PLAQUE_END_OF_LINE,\
|
||||
56,' ',23,'E',PLAQUE_END_OF_LINE,\
|
||||
PLAQUE_END_OF_LINE,PLAQUE_END_OF_LINE,PLAQUE_END_OF_LINE,\
|
||||
55,' ',PLAQUE_STRING,19,'U. S. S. ENTERPRISE',PLAQUE_END_OF_LINE,\
|
||||
PLAQUE_END_OF_LINE,PLAQUE_END_OF_LINE,PLAQUE_END_OF_LINE,PLAQUE_END_OF_LINE,\
|
||||
34,' ',PLAQUE_STRING,43,'FOR DEMONSTRATING OUTSTANDING ABILITY AS A ',\
|
||||
PLAQUE_STRING,16,'STARSHIP CAPTAIN',PLAQUE_END_OF_LINE,PLAQUE_END_OF_LINE,\
|
||||
48,' ',PLAQUE_STRING,32,'STARFLEET COMMAND BESTOWS TO YOU',PLAQUE_END_OF_LINE,\
|
||||
PLAQUE_END_OF_LINE,PLAQUE_INSERT_NAME,PLAQUE_END_OF_LINE,\
|
||||
59,' ',PLAQUE_STRING,11,'THE RANK OF',PLAQUE_END_OF_LINE,PLAQUE_END_OF_LINE,\
|
||||
55,' ',PLAQUE_STRING,20,'"COMMODORE EMERITUS"',PLAQUE_END_OF_LINE,PLAQUE_END_OF_LINE,\
|
||||
58,' ',PLAQUE_INSERT_LEVEL,PLAQUE_STRING,6,' LEVEL',PLAQUE_END_OF_LINE,PLAQUE_END_OF_LINE,\
|
||||
54,' ',PLAQUE_STRING,12,'THIS DAY OF ',PLAQUE_INSERT_DATE,PLAQUE_END_OF_LINE,\
|
||||
PLAQUE_END_OF_LINE,56,' ',PLAQUE_STRING,13,'YOUR SCORE: ',PLAQUE_INSERT_SCORE,\
|
||||
PLAQUE_END_OF_LINE,PLAQUE_END_OF_LINE,\
|
||||
52,' ',PLAQUE_STRING,24,'KLINGONS PER STARDATE: ',PLAQUE_INSERT_KLRATE,\
|
||||
PLAQUE_END_OF_LINE,PLAQUE_END_OF_ALL
|
||||
|
||||
align 2
|
||||
str_MainWndClass du 'SST32-FASM',0
|
||||
str_MainWndTitle du 'STAR TREK',0
|
||||
str_FontFace du 'Courier',0
|
||||
str_CharSizeText du 'Mj',0
|
||||
str_SetDirFailed du 'Unable to Set Current Directory. Please check permissions.',0
|
||||
str_MsgFileName du 'MsgTable.txt',0
|
||||
str_LogFileName du 'STARTREK.LOG',0
|
||||
str_FileMask du '*.TRK',0
|
||||
str_THOLIANX db 'THOLIANX',0
|
||||
str_TRK db '.TRK',0
|
||||
str_CmdListGames db '?.TRK',0
|
||||
str_EmSaveGame db 'EMSAVE.TRK',0
|
||||
str_PlaqueFile db 'PLAQUE.TXT',0
|
||||
|
||||
align 16
|
||||
glb_dbl_2e31 DOUBLE 2147483648.0
|
||||
glb_dbl_2e32 DOUBLE 4294967296.0
|
||||
glb_dbl_Ten DOUBLE 10.0
|
||||
glb_dbl_FpuPopper DOUBLE 0.0
|
||||
glb_dbl_0dot0625 DOUBLE 0.0625
|
||||
glb_dbl_0dot08 DOUBLE 0.08
|
||||
glb_dbl_0dot095 DOUBLE 0.095
|
||||
glb_dbl_0dot1 DOUBLE 0.1
|
||||
glb_dbl_0dot01 DOUBLE 0.01
|
||||
glb_dbl_0dot001 DOUBLE 0.001
|
||||
glb_dbl_0dot2 DOUBLE 0.2
|
||||
glb_dbl_0dot02 DOUBLE 0.02
|
||||
glb_dbl_0dot00001 DOUBLE 0.00001
|
||||
glb_dbl_0dot2777 DOUBLE 0.2777
|
||||
glb_dbl_0dot1777777777 DOUBLE 0.1777777777
|
||||
glb_dbl_0dot15 DOUBLE 0.15
|
||||
glb_dbl_0dot015 DOUBLE 0.015
|
||||
glb_dbl_0dot5 DOUBLE 0.5
|
||||
glb_dbl_0dot5235998 DOUBLE 0.5235998
|
||||
glb_dbl_0dot5235988 DOUBLE 0.5235988
|
||||
glb_dbl_0dot3 DOUBLE 0.3
|
||||
glb_dbl_0dot03 DOUBLE 0.03
|
||||
glb_dbl_0dot333 DOUBLE 0.3333333333
|
||||
glb_dbl_1dot5 DOUBLE 1.5
|
||||
glb_dbl_10dot5 DOUBLE 10.5
|
||||
glb_dbl_2dot5 DOUBLE 2.5
|
||||
glb_dbl_1dot2 DOUBLE 1.2
|
||||
glb_dbl_1dot23 DOUBLE 1.23
|
||||
glb_dbl_1dot4142 DOUBLE 1.4142
|
||||
glb_dbl_1dot57079633 DOUBLE 1.57079633
|
||||
glb_dbl_1dot01 DOUBLE 1.01
|
||||
glb_dbl_1dot90985932 DOUBLE 1.90985932
|
||||
glb_dbl_0dot04 DOUBLE 0.04
|
||||
glb_dbl_0dot4 DOUBLE 0.4
|
||||
glb_dbl_0dot45 DOUBLE 0.45
|
||||
glb_dbl_0dot49 DOUBLE 0.49
|
||||
glb_dbl_0dot05 DOUBLE 0.05
|
||||
glb_dbl_0dot005 DOUBLE 0.005
|
||||
glb_dbl_0dot00038 DOUBLE 0.00038
|
||||
glb_dbl_0dot006 DOUBLE 0.006
|
||||
glb_dbl_0dot75 DOUBLE 0.75
|
||||
glb_dbl_0dot77 DOUBLE 0.77
|
||||
glb_dbl_0dot65 DOUBLE 0.65
|
||||
glb_dbl_0dot6 DOUBLE 0.6
|
||||
glb_dbl_0dot89 DOUBLE 0.89
|
||||
glb_dbl_0dot8 DOUBLE 0.8
|
||||
glb_dbl_0dot9 DOUBLE 0.9
|
||||
glb_dbl_0dot99 DOUBLE 0.99
|
||||
glb_dbl_9dot99 DOUBLE 9.99
|
||||
glb_dbl_0dot98 DOUBLE 0.98
|
||||
glb_dbl_0dot995 DOUBLE 0.995
|
||||
glb_dbl_DOCKFAC DOUBLE 0.25
|
||||
glb_dbl_100 DOUBLE 100.0
|
||||
glb_dbl_200 DOUBLE 200.0
|
||||
glb_dbl_270 DOUBLE 270.0
|
||||
glb_dbl_66dot666 DOUBLE 66.666666666
|
||||
glb_dbl_2 DOUBLE 2.0
|
||||
glb_dbl_20 DOUBLE 20.0
|
||||
glb_dbl_3 DOUBLE 3.0
|
||||
glb_dbl_31 DOUBLE 31.0
|
||||
glb_dbl_39dot95 DOUBLE 39.95
|
||||
glb_dbl_4 DOUBLE 4.0
|
||||
glb_dbl_4dot5 DOUBLE 4.5
|
||||
glb_dbl_5 DOUBLE 5.0
|
||||
glb_dbl_6 DOUBLE 6.0
|
||||
glb_dbl_8 DOUBLE 8.0
|
||||
glb_dbl_25 DOUBLE 25.0
|
||||
glb_dbl_125 DOUBLE 125.0
|
||||
glb_dbl_50 DOUBLE 50.0
|
||||
glb_dbl_150 DOUBLE 150.0
|
||||
glb_dbl_950 DOUBLE 950.0
|
||||
glb_dbl_7 DOUBLE 7.0
|
||||
glb_dbl_7dot5 DOUBLE 7.5
|
||||
glb_dbl_9 DOUBLE 9.0
|
||||
glb_dbl_7dot853981634 DOUBLE 7.853981634
|
||||
glb_dbl_15 DOUBLE 15.0
|
||||
glb_dbl_12 DOUBLE 12.0
|
||||
glb_dbl_1175 DOUBLE 1175.0
|
||||
glb_dbl_75 DOUBLE 75.0
|
||||
glb_dbl_300 DOUBLE 300.0
|
||||
glb_dbl_30 DOUBLE 30.0
|
||||
glb_dbl_3000 DOUBLE 3000.0
|
||||
glb_dbl_400 DOUBLE 400.0
|
||||
glb_dbl_500 DOUBLE 500.0
|
||||
glb_dbl_600 DOUBLE 600.0
|
||||
glb_dbl_700 DOUBLE 700.0
|
||||
glb_dbl_800 DOUBLE 800.0
|
||||
glb_dbl_7200 DOUBLE 7200.0
|
||||
glb_dbl_450 DOUBLE 450.0
|
||||
glb_dbl_1000 DOUBLE 1000.0
|
||||
glb_dbl_5000 DOUBLE 5000.0
|
||||
glb_dbl_2500 DOUBLE 2500.0
|
||||
glb_dbl_1400 DOUBLE 1400.0
|
||||
glb_dbl_1500 DOUBLE 1500.0
|
||||
glb_dbl_1250 DOUBLE 1250.0
|
||||
glb_dbl_1E38 DOUBLE 1e38
|
||||
glb_dbl_3E_neg_5 DOUBLE 3e-5
|
||||
glb_dbl_KlingonsPerDate DOUBLE 0.0
|
||||
|
||||
; --- EOF ---
|
@ -1,680 +0,0 @@
|
||||
|
||||
; Import Section
|
||||
|
||||
dd 0, 0, 0, RVA kernel32, RVA kernel32tbl
|
||||
dd 0, 0, 0, RVA user32, RVA user32tbl
|
||||
dd 0, 0, 0, RVA gdi32, RVA gdi32tbl
|
||||
dd 0, 0, 0, 0, 0
|
||||
|
||||
kernel32tbl:
|
||||
;{W32}
|
||||
GetLocalTime dd RVA _GetLocalTime
|
||||
;{W32}
|
||||
SetFilePointer dd RVA _SetFilePointer
|
||||
;{W32}
|
||||
GetFileAttributes dd RVA _GetFileAttributes
|
||||
;{W32}
|
||||
SetCurrentDir dd RVA _SetCurrentDir
|
||||
;{W32}
|
||||
GetConsoleScrBufInfo dd RVA _GetConsoleScrBufInfo
|
||||
;{W32}
|
||||
GetConsoleMode dd RVA _GetConsoleMode
|
||||
;{W32}
|
||||
GetStdHandle dd RVA _GetStdHandle
|
||||
;{W32}
|
||||
FreeConsole dd RVA _FreeConsole
|
||||
;{W32}
|
||||
AllocConsole dd RVA _AllocConsole
|
||||
;{W32}
|
||||
CreateThread dd RVA _CreateThread
|
||||
;{W32}
|
||||
Sleep dd RVA _Sleep
|
||||
;{W32}
|
||||
MulDiv dd RVA _MulDiv
|
||||
;{W32}
|
||||
VirtualFree dd RVA _VirtualFree
|
||||
;{W32}
|
||||
VirtualAlloc dd RVA _VirtualAlloc
|
||||
;{W32}
|
||||
GetFileSize dd RVA _GetFileSize
|
||||
;{W32}
|
||||
WriteFile dd RVA _WriteFile
|
||||
;{W32}
|
||||
ReadFile dd RVA _ReadFile
|
||||
;{W32}
|
||||
CloseHandle dd RVA _CloseHandle
|
||||
;{W32}
|
||||
CreateFile dd RVA _CreateFile
|
||||
;{W32}
|
||||
CreateFileAnsi dd RVA _CreateFileAnsi
|
||||
;{W32}
|
||||
GetTickCount dd RVA _GetTickCount
|
||||
;{W32}
|
||||
FindClose dd RVA _FindClose
|
||||
;{W32}
|
||||
FindNextFile dd RVA _FindNextFile
|
||||
;{W32}
|
||||
FindFirstFile dd RVA _FindFirstFile
|
||||
;{W32}
|
||||
GetProcessHeap dd RVA _GetProcessHeap
|
||||
;{W32}
|
||||
GetModuleFileName dd RVA _GetModuleFileName
|
||||
;{W32}
|
||||
OutputDebugString dd RVA _OutputDebugString
|
||||
;{W32}
|
||||
HeapCreate dd RVA _HeapCreate
|
||||
;{W32}
|
||||
HeapAlloc dd RVA _HeapAlloc
|
||||
;{W32}
|
||||
HeapReAlloc dd RVA _HeapReAlloc
|
||||
;{W32}
|
||||
HeapFree dd RVA _HeapFree
|
||||
;{W32}
|
||||
HeapDestroy dd RVA _HeapDestroy
|
||||
;{W32}
|
||||
GetModuleHandle dd RVA _GetModuleHandle
|
||||
;{W32}
|
||||
ExitProcess dd RVA _ExitProcess
|
||||
dd 0
|
||||
|
||||
user32tbl:
|
||||
;{W32}
|
||||
OffsetRect dd RVA _OffsetRect
|
||||
;{W32}
|
||||
AdjustWindowRect dd RVA _AdjustWindowRect
|
||||
;{W32}
|
||||
MessageBeep dd RVA _MessageBeep
|
||||
;{W32}
|
||||
GetCursorPos dd RVA _GetCursorPos
|
||||
;{W32}
|
||||
TrackPopupMenu dd RVA _TrackPopupMenu
|
||||
;{W32}
|
||||
AppendMenu dd RVA _AppendMenu
|
||||
;{W32}
|
||||
DestroyMenu dd RVA _DestroyMenu
|
||||
;{W32}
|
||||
CreatePopupMenu dd RVA _CreatePopupMenu
|
||||
;{W32}
|
||||
GetFocus dd RVA _GetFocus
|
||||
;{W32}
|
||||
GetWindowTextLen dd RVA _GetWindowTextLen
|
||||
;{W32}
|
||||
GetWindowText dd RVA _GetWindowText
|
||||
;{W32}
|
||||
GetDlgItem dd RVA _GetDlgItem
|
||||
;{W32}
|
||||
PostMessage dd RVA _PostMessage
|
||||
;{W32}
|
||||
SendMessage dd RVA _SendMessage
|
||||
;{W32}
|
||||
InflateRect dd RVA _InflateRect
|
||||
;{W32}
|
||||
EndDialog dd RVA _EndDialog
|
||||
;{W32}
|
||||
DlgBoxParam dd RVA _DlgBoxParam
|
||||
;{W32}
|
||||
GetSystemMetrics dd RVA _GetSystemMetrics
|
||||
;{W32}
|
||||
DrawIcon dd RVA _DrawIcon
|
||||
;{W32}
|
||||
DrawText dd RVA _DrawText
|
||||
;{W32}
|
||||
ReleaseCapture dd RVA _ReleaseCapture
|
||||
;{W32}
|
||||
SetCapture dd RVA _SetCapture
|
||||
;{W32}
|
||||
SetWindowText dd RVA _SetWindowText
|
||||
;{W32}
|
||||
SetCursor dd RVA _SetCursor
|
||||
;{W32}
|
||||
ReleaseDC dd RVA _ReleaseDC
|
||||
;{W32}
|
||||
GetDC dd RVA _GetDC
|
||||
;{W32}
|
||||
FrameRect dd RVA _FrameRect
|
||||
;{W32}
|
||||
FillRect dd RVA _FillRect
|
||||
;{W32}
|
||||
EndPaint dd RVA _EndPaint
|
||||
;{W32}
|
||||
BeginPaint dd RVA _BeginPaint
|
||||
;{W32}
|
||||
UpdateWindow dd RVA _UpdateWindow
|
||||
;{W32}
|
||||
PostQuitMessage dd RVA _PostQuitMessage
|
||||
;{W32}
|
||||
LoadBitmap dd RVA _LoadBitmap
|
||||
;{W32}
|
||||
LoadImage dd RVA _LoadImage
|
||||
;{W32}
|
||||
LoadIcon dd RVA _LoadIcon
|
||||
;{W32}
|
||||
LoadCursor dd RVA _LoadCursor
|
||||
;{W32}
|
||||
GetWindowRect dd RVA _GetWindowRect
|
||||
;{W32}
|
||||
GetClientRect dd RVA _GetClientRect
|
||||
;{W32}
|
||||
ShowWindow dd RVA _ShowWindow
|
||||
;{W32}
|
||||
CreateWindowEx dd RVA _CreateWindowEx
|
||||
;{W32}
|
||||
DefWindowProc dd RVA _DefWindowProc
|
||||
;{W32}
|
||||
RegisterClass dd RVA _RegisterClass
|
||||
;{W32}
|
||||
GetClassInfo dd RVA _GetClassInfo
|
||||
;{W32}
|
||||
SetWindowLong dd RVA _SetWindowLong
|
||||
;{W32}
|
||||
GetWindowLong dd RVA _GetWindowLong
|
||||
;{W32}
|
||||
GetMessage dd RVA _GetMessage
|
||||
;{W32}
|
||||
DispatchMessage dd RVA _DispatchMessage
|
||||
;{W32}
|
||||
TranslateMessage dd RVA _TranslateMessage
|
||||
;{W32}
|
||||
TranslateAccelerator dd RVA _TranslateAccelerator
|
||||
;{W32}
|
||||
CreateAcceleratorTable dd RVA _CreateAcceleratorTable
|
||||
;{W32}
|
||||
InvalidateRect dd RVA _InvalidateRect
|
||||
;{W32}
|
||||
MoveWindow dd RVA _MoveWindow
|
||||
;{W32}
|
||||
IsWindowVisible dd RVA _IsWindowVisible
|
||||
;{W32}
|
||||
MessageBox dd RVA _MessageBox
|
||||
dd 0
|
||||
|
||||
gdi32tbl:
|
||||
;{W32}
|
||||
TextOut dd RVA _TextOut
|
||||
;{W32}
|
||||
MoveToEx dd RVA _MoveToEx
|
||||
;{W32}
|
||||
SetTextAlign dd RVA _SetTextAlign
|
||||
;{W32}
|
||||
BitBlt dd RVA _BitBlt
|
||||
;{W32}
|
||||
CreateCompatibleBitmap dd RVA _CreateCompatibleBitmap
|
||||
;{W32}
|
||||
DeleteDC dd RVA _DeleteDC
|
||||
;{W32}
|
||||
SetTextColor dd RVA _SetTextColor
|
||||
;{W32}
|
||||
CreatePatternBrush dd RVA _CreatePatternBrush
|
||||
;{W32}
|
||||
GetStockObject dd RVA _GetStockObject
|
||||
;{W32}
|
||||
CreatePen dd RVA _CreatePen
|
||||
;{W32}
|
||||
Polyline dd RVA _Polyline
|
||||
;{W32}
|
||||
CreateSolidBrush dd RVA _CreateSolidBrush
|
||||
;{W32}
|
||||
DeleteObject dd RVA _DeleteObject
|
||||
;{W32}
|
||||
CreateFontIndirect dd RVA _CreateFontIndirect
|
||||
;{W32}
|
||||
GetDeviceCaps dd RVA _GetDeviceCaps
|
||||
;{W32}
|
||||
GetTextExtentPoint32 dd RVA _GetTextExtentPoint32
|
||||
;{W32}
|
||||
SetBkMode dd RVA _SetBkMode
|
||||
;{W32}
|
||||
SelectObject dd RVA _SelectObject
|
||||
;{W32}
|
||||
CreateCompatibleDC dd RVA _CreateCompatibleDC
|
||||
dd 0
|
||||
|
||||
; --- Modules
|
||||
|
||||
kernel32 db 'KERNEL32.DLL', 0
|
||||
user32 db 'USER32.DLL', 0
|
||||
gdi32 db 'GDI32.DLL', 0
|
||||
|
||||
; --- Table
|
||||
|
||||
align 2
|
||||
_GetLocalTime dw 0
|
||||
db 'GetLocalTime',0
|
||||
|
||||
align 2
|
||||
_SetFilePointer dw 0
|
||||
db 'SetFilePointer',0
|
||||
|
||||
align 2
|
||||
_GetFileAttributes dw 0
|
||||
db 'GetFileAttributesA',0
|
||||
|
||||
align 2
|
||||
_SetCurrentDir dw 0
|
||||
db 'SetCurrentDirectoryW',0
|
||||
|
||||
align 2
|
||||
_OffsetRect dw 0
|
||||
db 'OffsetRect',0
|
||||
|
||||
align 2
|
||||
_GetConsoleScrBufInfo dw 0
|
||||
db 'GetConsoleScreenBufferInfo',0
|
||||
|
||||
align 2
|
||||
_GetConsoleMode dw 0
|
||||
db 'GetConsoleMode',0
|
||||
|
||||
align 2
|
||||
_FreeConsole dw 0
|
||||
db 'FreeConsole',0
|
||||
|
||||
align 2
|
||||
_GetStdHandle dw 0
|
||||
db 'GetStdHandle',0
|
||||
|
||||
align 2
|
||||
_AllocConsole dw 0
|
||||
db 'AllocConsole',0
|
||||
|
||||
align 2
|
||||
_CreateThread dw 0
|
||||
db 'CreateThread',0
|
||||
|
||||
align 2
|
||||
_Sleep dw 0
|
||||
db 'Sleep',0
|
||||
|
||||
align 2
|
||||
_AdjustWindowRect dw 0
|
||||
db 'AdjustWindowRect',0
|
||||
|
||||
align 2
|
||||
_MessageBeep dw 0
|
||||
db 'MessageBeep',0
|
||||
|
||||
align 2
|
||||
_TextOut dw 0
|
||||
db 'TextOutW',0
|
||||
|
||||
align 2
|
||||
_MoveToEx dw 0
|
||||
db 'MoveToEx',0
|
||||
|
||||
align 2
|
||||
_SetTextAlign dw 0
|
||||
db 'SetTextAlign',0
|
||||
|
||||
align 2
|
||||
_BitBlt dw 0
|
||||
db 'BitBlt',0
|
||||
|
||||
align 2
|
||||
_CreateCompatibleBitmap dw 0
|
||||
db 'CreateCompatibleBitmap',0
|
||||
|
||||
align 2
|
||||
_DeleteDC dw 0
|
||||
db 'DeleteDC',0
|
||||
|
||||
align 2
|
||||
_MulDiv dw 0
|
||||
db 'MulDiv',0
|
||||
|
||||
align 2
|
||||
_GetCursorPos dw 0
|
||||
db 'GetCursorPos',0
|
||||
|
||||
align 2
|
||||
_TrackPopupMenu dw 0
|
||||
db 'TrackPopupMenu',0
|
||||
|
||||
align 2
|
||||
_AppendMenu dw 0
|
||||
db 'AppendMenuW',0
|
||||
|
||||
align 2
|
||||
_DestroyMenu dw 0
|
||||
db 'DestroyMenu',0
|
||||
|
||||
align 2
|
||||
_CreatePopupMenu dw 0
|
||||
db 'CreatePopupMenu',0
|
||||
|
||||
align 2
|
||||
_GetFocus dw 0
|
||||
db 'GetFocus',0
|
||||
|
||||
align 2
|
||||
_SetTextColor dw 0
|
||||
db 'SetTextColor',0
|
||||
|
||||
align 2
|
||||
_GetWindowTextLen dw 0
|
||||
db 'GetWindowTextLengthW',0
|
||||
|
||||
align 2
|
||||
_GetWindowText dw 0
|
||||
db 'GetWindowTextW',0
|
||||
|
||||
align 2
|
||||
_CreatePatternBrush dw 0
|
||||
db 'CreatePatternBrush',0
|
||||
|
||||
align 2
|
||||
_GetDlgItem dw 0
|
||||
db 'GetDlgItem',0
|
||||
|
||||
align 2
|
||||
_VirtualFree dw 0
|
||||
db 'VirtualFree',0
|
||||
|
||||
align 2
|
||||
_VirtualAlloc dw 0
|
||||
db 'VirtualAlloc',0
|
||||
|
||||
align 2
|
||||
_ImageList_AddMasked dw 0
|
||||
db 'ImageList_AddMasked',0
|
||||
|
||||
align 2
|
||||
_ImageList_Create dw 0
|
||||
db 'ImageList_Create',0
|
||||
|
||||
align 2
|
||||
_PostMessage dw 0
|
||||
db 'PostMessageW',0
|
||||
|
||||
align 2
|
||||
_SendMessage dw 0
|
||||
db 'SendMessageW',0
|
||||
|
||||
align 2
|
||||
_GetFileSize dw 0
|
||||
db 'GetFileSize',0
|
||||
|
||||
align 2
|
||||
_WriteFile dw 0
|
||||
db 'WriteFile',0
|
||||
|
||||
align 2
|
||||
_ReadFile dw 0
|
||||
db 'ReadFile',0
|
||||
|
||||
align 2
|
||||
_CloseHandle dw 0
|
||||
db 'CloseHandle',0
|
||||
|
||||
align 2
|
||||
_CreateFile dw 0
|
||||
db 'CreateFileW',0
|
||||
|
||||
align 2
|
||||
_CreateFileAnsi dw 0
|
||||
db 'CreateFileA',0
|
||||
|
||||
align 2
|
||||
_InflateRect dw 0
|
||||
db 'InflateRect',0
|
||||
|
||||
align 2
|
||||
_EndDialog dw 0
|
||||
db 'EndDialog',0
|
||||
|
||||
align 2
|
||||
_DlgBoxParam dw 0
|
||||
db 'DialogBoxIndirectParamW',0
|
||||
|
||||
align 2
|
||||
_GetSystemMetrics dw 0
|
||||
db 'GetSystemMetrics',0
|
||||
|
||||
align 2
|
||||
_GetStockObject dw 0
|
||||
db 'GetStockObject',0
|
||||
|
||||
align 2
|
||||
_GetTickCount dw 0
|
||||
db 'GetTickCount',0
|
||||
|
||||
align 2
|
||||
_FindClose dw 0
|
||||
db 'FindClose',0
|
||||
|
||||
align 2
|
||||
_FindNextFile dw 0
|
||||
db 'FindNextFileW',0
|
||||
|
||||
align 2
|
||||
_FindFirstFile dw 0
|
||||
db 'FindFirstFileW',0
|
||||
|
||||
align 2
|
||||
_DrawText dw 0
|
||||
db 'DrawTextW',0
|
||||
|
||||
align 2
|
||||
_DrawIcon dw 0
|
||||
db 'DrawIcon',0
|
||||
|
||||
align 2
|
||||
_CreatePen dw 0
|
||||
db 'CreatePen',0
|
||||
|
||||
align 2
|
||||
_Polyline dw 0
|
||||
db 'Polyline',0
|
||||
|
||||
align 2
|
||||
_CreateSolidBrush dw 0
|
||||
db 'CreateSolidBrush',0
|
||||
|
||||
align 2
|
||||
_DeleteObject dw 0
|
||||
db 'DeleteObject',0
|
||||
|
||||
align 2
|
||||
_SetCapture dw 0
|
||||
db 'SetCapture',0
|
||||
|
||||
align 2
|
||||
_ReleaseCapture dw 0
|
||||
db 'ReleaseCapture',0
|
||||
|
||||
align 2
|
||||
_SetWindowText dw 0
|
||||
db 'SetWindowTextW',0
|
||||
|
||||
align 2
|
||||
_InitCommonControlsEx dw 0
|
||||
db 'InitCommonControlsEx',0
|
||||
|
||||
align 2
|
||||
_SetCursor dw 0
|
||||
db 'SetCursor',0
|
||||
|
||||
align 2
|
||||
_GetProcessHeap dw 0
|
||||
db 'GetProcessHeap',0
|
||||
|
||||
align 2
|
||||
_CreateFontIndirect dw 0
|
||||
db 'CreateFontIndirectW',0
|
||||
|
||||
align 2
|
||||
_GetDeviceCaps dw 0
|
||||
db 'GetDeviceCaps',0
|
||||
|
||||
align 2
|
||||
_ReleaseDC dw 0
|
||||
db 'ReleaseDC',0
|
||||
|
||||
align 2
|
||||
_GetDC dw 0
|
||||
db 'GetDC',0
|
||||
|
||||
align 2
|
||||
_GetTextExtentPoint32 dw 0
|
||||
db 'GetTextExtentPoint32W',0
|
||||
|
||||
align 2
|
||||
_GetModuleFileName dw 0
|
||||
db 'GetModuleFileNameW',0
|
||||
|
||||
align 2
|
||||
_FrameRect dw 0
|
||||
db 'FrameRect',0
|
||||
|
||||
align 2
|
||||
_FillRect dw 0
|
||||
db 'FillRect',0
|
||||
|
||||
align 2
|
||||
_SetBkMode dw 0
|
||||
db 'SetBkMode',0
|
||||
|
||||
align 2
|
||||
_EndPaint dw 0
|
||||
db 'EndPaint',0
|
||||
|
||||
align 2
|
||||
_BeginPaint dw 0
|
||||
db 'BeginPaint',0
|
||||
|
||||
align 2
|
||||
_SelectObject dw 0
|
||||
db 'SelectObject',0
|
||||
|
||||
align 2
|
||||
_OutputDebugString dw 0
|
||||
db 'OutputDebugStringW',0
|
||||
|
||||
align 2
|
||||
_HeapCreate dw 0
|
||||
db 'HeapCreate',0
|
||||
|
||||
align 2
|
||||
_HeapAlloc dw 0
|
||||
db 'HeapAlloc',0
|
||||
|
||||
align 2
|
||||
_HeapReAlloc dw 0
|
||||
db 'HeapReAlloc',0
|
||||
|
||||
align 2
|
||||
_HeapFree dw 0
|
||||
db 'HeapFree',0
|
||||
|
||||
align 2
|
||||
_HeapDestroy dw 0
|
||||
db 'HeapDestroy',0
|
||||
|
||||
align 2
|
||||
_IsWindowVisible dw 0
|
||||
db 'IsWindowVisible',0
|
||||
|
||||
align 2
|
||||
_MoveWindow dw 0
|
||||
db 'MoveWindow',0
|
||||
|
||||
align 2
|
||||
_InvalidateRect dw 0
|
||||
db 'InvalidateRect',0
|
||||
|
||||
align 2
|
||||
_UpdateWindow dw 0
|
||||
db 'UpdateWindow',0
|
||||
|
||||
align 2
|
||||
_CreateAcceleratorTable dw 0
|
||||
db 'CreateAcceleratorTableW',0
|
||||
|
||||
align 2
|
||||
_TranslateAccelerator dw 0
|
||||
db 'TranslateAccelerator',0
|
||||
|
||||
align 2
|
||||
_TranslateMessage dw 0
|
||||
db 'TranslateMessage',0
|
||||
|
||||
align 2
|
||||
_DispatchMessage dw 0
|
||||
db 'DispatchMessageW',0
|
||||
|
||||
align 2
|
||||
_GetMessage dw 0
|
||||
db 'GetMessageW',0
|
||||
|
||||
align 2
|
||||
_PostQuitMessage dw 0
|
||||
db 'PostQuitMessage',0
|
||||
|
||||
align 2
|
||||
_LoadBitmap dw 0
|
||||
db 'LoadBitmapW',0
|
||||
|
||||
align 2
|
||||
_LoadImage dw 0
|
||||
db 'LoadImageW',0
|
||||
|
||||
align 2
|
||||
_LoadIcon dw 0
|
||||
db 'LoadIconW',0
|
||||
|
||||
align 2
|
||||
_LoadCursor dw 0
|
||||
db 'LoadCursorW',0
|
||||
|
||||
align 2
|
||||
_GetWindowRect dw 0
|
||||
db 'GetWindowRect',0
|
||||
|
||||
align 2
|
||||
_GetClientRect dw 0
|
||||
db 'GetClientRect',0
|
||||
|
||||
align 2
|
||||
_ShowWindow dw 0
|
||||
db 'ShowWindow',0
|
||||
|
||||
align 2
|
||||
_CreateWindowEx dw 0
|
||||
db 'CreateWindowExW',0
|
||||
|
||||
align 2
|
||||
_DefWindowProc dw 0
|
||||
db 'DefWindowProcW',0
|
||||
|
||||
align 2
|
||||
_RegisterClass dw 0
|
||||
db 'RegisterClassW',0
|
||||
|
||||
align 2
|
||||
_GetClassInfo dw 0
|
||||
db 'GetClassInfoW',0
|
||||
|
||||
align 2
|
||||
_SetWindowLong dw 0
|
||||
db 'SetWindowLongW',0
|
||||
|
||||
align 2
|
||||
_GetWindowLong dw 0
|
||||
db 'GetWindowLongW',0
|
||||
|
||||
align 2
|
||||
_GetModuleHandle dw 0
|
||||
db 'GetModuleHandleW',0
|
||||
|
||||
align 2
|
||||
_CreateCompatibleDC dw 0
|
||||
db 'CreateCompatibleDC',0
|
||||
|
||||
align 2
|
||||
_ExitProcess dw 0
|
||||
db 'ExitProcess',0
|
||||
|
||||
align 2
|
||||
_MessageBox dw 0
|
||||
db 'MessageBoxW',0
|
||||
|
||||
;<EOF>
|
@ -1,98 +0,0 @@
|
||||
; --------------------------------------------------------------------------
|
||||
; Win32 PE File Template
|
||||
; {BINEXT=EXE} (Do not edit or remove this line)
|
||||
; --------------------------------------------------------------------------
|
||||
|
||||
; *********************************************************************
|
||||
; * PERMISSION IS HEREBY GRANTED FOR THE COPYING, *
|
||||
; * DISTRIBUTION, MODIFICATION AND USE OF THIS PROGRAM AND *
|
||||
; * ASSOCIATED DOCUMENTATION FOR RECREATIONAL PURPOSES, *
|
||||
; * PROVIDED THAT ALL REFERENCES TO THE AUTHOR ARE RETAINED. *
|
||||
; * HOWEVER, PERMISSION IS NOT AND WILL NOT BE GRANTED FOR *
|
||||
; * THE SALE OR PROMOTIONAL USE OF THIS PROGRAM OR PROGRAM *
|
||||
; * DOCUMENTATION, OR FOR USE IN ANY SITUATION IN WHICH *
|
||||
; * PROFIT MAY BE CONSIDERED AN OBJECTIVE, SINCE IT IS THE *
|
||||
; * DESIRE OF THE AUTHOR TO RESPECT THE COPYRIGHTS OF THE *
|
||||
; * ORIGINATORS OF STAR TREK. *
|
||||
; *********************************************************************
|
||||
|
||||
format PE GUI 4.0
|
||||
entry start
|
||||
stack 10000h, 10000h
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Definitions
|
||||
; --------------------------------------------------------------------------
|
||||
|
||||
include 'Macros.Inc'
|
||||
include 'Win32.Inc'
|
||||
include 'TConsole.Inc'
|
||||
include 'TCmdBuf.Inc'
|
||||
include 'TCommon.Inc'
|
||||
include 'TRandom.Inc'
|
||||
include 'TLog.Inc'
|
||||
;{INCLDEF} (Definitions will be inserted before this line)
|
||||
|
||||
PROC_ALIGN equ 8
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Data Section
|
||||
; --------------------------------------------------------------------------
|
||||
section '.data' data readable writeable
|
||||
|
||||
include 'Globals.Inc'
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Code Modules
|
||||
; --------------------------------------------------------------------------
|
||||
section '.code' code readable executable
|
||||
|
||||
include 'TApp.Asm'
|
||||
include 'TConsole.Asm'
|
||||
include 'TString.Asm'
|
||||
include 'TCmdBuf.Asm'
|
||||
include 'TGame.Asm'
|
||||
include 'TMsgTable.Asm'
|
||||
include 'TCommon.Asm'
|
||||
include 'TRandom.Asm'
|
||||
include 'TArray.Asm'
|
||||
include 'TFormat.Asm'
|
||||
include 'TSrScan.Asm'
|
||||
include 'TLrScan.Asm'
|
||||
include 'TChart.Asm'
|
||||
include 'TMove.Asm'
|
||||
include 'TFinish.Asm'
|
||||
include 'TAttack.Asm'
|
||||
include 'TEvents.Asm'
|
||||
include 'TNova.Asm'
|
||||
include 'TPhasers.Asm'
|
||||
include 'TShields.Asm'
|
||||
include 'TDock.Asm'
|
||||
include 'TPhotons.Asm'
|
||||
include 'TPlanet.Asm'
|
||||
include 'TImpulse.Asm'
|
||||
include 'TLog.Asm'
|
||||
;{INCLIMPL} (Code modules will be inserted before this line)
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Entry Point
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
start:
|
||||
call TApp_SetLocalDir
|
||||
jnc .exit
|
||||
|
||||
call TApp_Init
|
||||
call TApp_Run
|
||||
|
||||
.exit:
|
||||
invoke ExitProcess, 0
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Imports
|
||||
; --------------------------------------------------------------------------
|
||||
section '.idata' import data readable writeable
|
||||
|
||||
include 'Imports.Inc'
|
||||
|
||||
; --- EOF ---
|
@ -1,292 +0,0 @@
|
||||
|
||||
_DEBUG = 1
|
||||
|
||||
; --- Parameters inside WndProc
|
||||
|
||||
hWnd equ [ebp + 8]
|
||||
uiMsg equ [ebp + 12]
|
||||
WParam equ [ebp + 16]
|
||||
LParam equ [ebp + 20]
|
||||
|
||||
; --- Splitting WndProc parameters
|
||||
|
||||
macro mcLPtoXY LParam {
|
||||
; OUT: EDX = Y coordinate or HEIGHT
|
||||
; OUT: EAX = X coordinate or WIDTH
|
||||
mov eax, LParam
|
||||
mov edx, LParam
|
||||
and eax, 0000FFFFh
|
||||
shr edx, 16
|
||||
}
|
||||
|
||||
; --- String operation (WCHAR)
|
||||
|
||||
macro mcStrCopy {
|
||||
xor eax, eax
|
||||
@@:
|
||||
lodsw
|
||||
stosw
|
||||
test eax, eax
|
||||
jnz @r
|
||||
}
|
||||
|
||||
; --- Indirectly call STDCALL procedure
|
||||
|
||||
macro invoke api_proc, [arg]
|
||||
{
|
||||
common
|
||||
if ~ arg eq
|
||||
reverse
|
||||
pushd arg
|
||||
common
|
||||
end if
|
||||
call [api_proc]
|
||||
}
|
||||
|
||||
macro rinvoke api_proc_reg, [arg]
|
||||
{
|
||||
common
|
||||
if ~ arg eq
|
||||
reverse
|
||||
pushd arg
|
||||
common
|
||||
end if
|
||||
call api_proc_reg
|
||||
}
|
||||
|
||||
; --- FPU
|
||||
|
||||
macro mcFpuPushR32 r32
|
||||
{
|
||||
mov [glb_FPU_Int32], r32
|
||||
fild [glb_FPU_Int32]
|
||||
}
|
||||
|
||||
macro mcFpuPop
|
||||
{
|
||||
fstp [glb_dbl_FpuPopper]
|
||||
}
|
||||
|
||||
; --- Heap allocator
|
||||
|
||||
macro mcMemAlloc hHeap, nBytes {
|
||||
invoke HeapAlloc, hHeap, HEAP_NO_SERIALIZE, nBytes
|
||||
}
|
||||
|
||||
macro mcMemFree hHeap, pBuf {
|
||||
invoke HeapFree, hHeap, HEAP_NO_SERIALIZE, pBuf
|
||||
}
|
||||
|
||||
macro mcGlobalMalloc nBytes {
|
||||
mcMemAlloc [glb_HAllocator], nBytes
|
||||
}
|
||||
|
||||
macro mcGlobalFree pBuf {
|
||||
mcMemFree [glb_HAllocator], pBuf
|
||||
}
|
||||
|
||||
; --- Page allocator
|
||||
|
||||
macro mcAllocatePages nBytes {
|
||||
invoke VirtualAlloc, 0, nBytes, \
|
||||
MEM_RESERVE or MEM_COMMIT, \
|
||||
PAGE_READWRITE
|
||||
}
|
||||
|
||||
macro mcReleasePages pData {
|
||||
invoke VirtualFree, pData, 0, MEM_RELEASE
|
||||
}
|
||||
|
||||
; --- Local variables
|
||||
|
||||
macro mcLoadLocalRef AnyReg, instance {
|
||||
lea AnyReg, [esp + instance]
|
||||
}
|
||||
|
||||
macro mcLoadLocal AnyReg, instance {
|
||||
mov AnyReg, [esp + instance]
|
||||
}
|
||||
|
||||
macro mcStoreThis {
|
||||
mov [esp], ebx
|
||||
}
|
||||
|
||||
macro mcLoadThis {
|
||||
mov ebx, [esp]
|
||||
}
|
||||
|
||||
macro mcStoreLocal instance, AnyReg {
|
||||
mov [esp + instance], AnyReg
|
||||
}
|
||||
|
||||
macro mcBeginLocals LocalSize {
|
||||
sub esp, LocalSize
|
||||
}
|
||||
|
||||
macro mcEndLocals LocalSize {
|
||||
add esp, LocalSize
|
||||
}
|
||||
|
||||
; --- Virtual call on the object instance
|
||||
|
||||
macro mcVirtCallOnEBX OfsMethod {
|
||||
mov eax, [ebx]
|
||||
call dword [eax + OfsMethod]
|
||||
}
|
||||
|
||||
macro mcVirtCall Instance, OfsMethod {
|
||||
lea ebx, [Instance]
|
||||
mov eax, [ebx]
|
||||
call dword [eax + OfsMethod]
|
||||
}
|
||||
|
||||
; --- CALLBACK
|
||||
|
||||
macro mcProlog {
|
||||
push ebp
|
||||
mov ebp, esp
|
||||
push ebx
|
||||
push esi
|
||||
push edi
|
||||
}
|
||||
|
||||
macro mcEpilog {
|
||||
pop edi
|
||||
pop esi
|
||||
pop ebx
|
||||
leave
|
||||
}
|
||||
|
||||
; --- Misc...
|
||||
|
||||
macro mc_CMP_ST0_ST1
|
||||
{
|
||||
fcomip st, st1
|
||||
fstp [glb_dbl_FpuPopper]
|
||||
}
|
||||
|
||||
macro mcLoadQuadStatePtr r32
|
||||
{
|
||||
mov r32, [glb_pGameState]
|
||||
add r32, TGameState.game_QuadState
|
||||
}
|
||||
|
||||
macro mcLoadNeg1 r32
|
||||
{
|
||||
mcZeroBits r32
|
||||
dec r32
|
||||
}
|
||||
|
||||
macro mcLoad8bitsToReg32 r32, _8bit_value
|
||||
{
|
||||
push _8bit_value
|
||||
pop r32
|
||||
}
|
||||
|
||||
macro mcLoad1 r32
|
||||
{
|
||||
mcZeroBits r32
|
||||
inc r32
|
||||
}
|
||||
|
||||
; ESI = source
|
||||
; EDI = destination
|
||||
macro mcMemCopy nBytesAligned4
|
||||
{
|
||||
mov ecx, nBytesAligned4
|
||||
shr ecx, 2
|
||||
rep movsd
|
||||
}
|
||||
|
||||
macro mcMul10 r32 {
|
||||
push esi
|
||||
shl r32, 1
|
||||
push r32
|
||||
shl r32, 2
|
||||
pop esi
|
||||
add r32, esi
|
||||
pop esi
|
||||
}
|
||||
|
||||
macro mcZeroBits any_reg {
|
||||
xor any_reg, any_reg
|
||||
}
|
||||
|
||||
macro mcLoadRGB reg32, r8, g8, b8 {
|
||||
mov reg32, (b8 shl 16) or (g8 shl 8) or r8
|
||||
}
|
||||
|
||||
; --- Rectangle
|
||||
|
||||
macro mcRectCopy {
|
||||
; ESI = source rectangle
|
||||
; EDI = target rectangle
|
||||
movsd
|
||||
movsd
|
||||
movsd
|
||||
movsd
|
||||
}
|
||||
|
||||
macro mcRectCopySafe {
|
||||
; ESI = source rectangle
|
||||
; EDI = target rectangle
|
||||
push esi
|
||||
movsd
|
||||
movsd
|
||||
movsd
|
||||
movsd
|
||||
pop esi
|
||||
}
|
||||
|
||||
macro mcRectWidth r32, pRect {
|
||||
mov r32, [pRect + RECT.rc_Right]
|
||||
sub r32, [pRect + RECT.rc_Left]
|
||||
}
|
||||
|
||||
macro mcRectHeight r32, pRect {
|
||||
mov r32, [pRect + RECT.rc_Bottom]
|
||||
sub r32, [pRect + RECT.rc_Top]
|
||||
}
|
||||
|
||||
; --- Branching
|
||||
|
||||
macro mcOnRegEqu AnyReg, AnyValue, AnyLabel {
|
||||
cmp AnyReg, AnyValue
|
||||
je AnyLabel
|
||||
}
|
||||
|
||||
macro mcOnRegNotEqu AnyReg, AnyValue, AnyLabel {
|
||||
cmp AnyReg, AnyValue
|
||||
jne AnyLabel
|
||||
}
|
||||
|
||||
macro mcOnRegZero AnyReg, AnyLabel {
|
||||
test AnyReg, AnyReg
|
||||
jz AnyLabel
|
||||
}
|
||||
|
||||
macro mcOnRegNotZero AnyReg, AnyLabel {
|
||||
test AnyReg, AnyReg
|
||||
jnz AnyLabel
|
||||
}
|
||||
|
||||
; --- OOP
|
||||
|
||||
macro mcLoadMemberRef AnyReg, instance {
|
||||
lea AnyReg, [ebx + instance]
|
||||
}
|
||||
|
||||
macro mcLoadMember AnyReg, instance {
|
||||
mov AnyReg, [ebx + instance]
|
||||
}
|
||||
|
||||
macro mcStoreMember instance, AnyReg {
|
||||
mov [ebx + instance], AnyReg
|
||||
}
|
||||
|
||||
macro mcAttachVTable addrvtbl {
|
||||
mov eax, addrvtbl
|
||||
mov [ebx], eax
|
||||
}
|
||||
|
||||
; --- EOF ---
|
@ -1,770 +0,0 @@
|
||||
; --------------------------------------------------------------------------
|
||||
; FILE: TApp.Asm
|
||||
; DATE: September 21, 2008
|
||||
; --------------------------------------------------------------------------
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; DESTRCT
|
||||
; --------------------------------------------------------------------------
|
||||
virtual at 0
|
||||
loc84:
|
||||
.nCountDown COUNT ?
|
||||
.size = $
|
||||
end virtual
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TApp_SelfDestruct:
|
||||
mcBeginLocals loc84.size
|
||||
|
||||
mov cl, DEV_COMPUTER
|
||||
call TArray_IsDamaged
|
||||
jnc .L5
|
||||
|
||||
call TConsole_ScrollUp
|
||||
mov ecx, 686
|
||||
call TConsole_ProutGameMsg
|
||||
call TConsole_ScrollUp
|
||||
jmp .done
|
||||
|
||||
.L5:
|
||||
call TConsole_ScrollUp
|
||||
mov ecx, 290
|
||||
call TConsole_ProutGameMsg
|
||||
mov ecx, 687
|
||||
call TConsole_Prout
|
||||
inc ecx
|
||||
call TConsole_Prout
|
||||
call TConsole_ScrollUp
|
||||
|
||||
mcLoad8bitsToReg32 ecx, 10
|
||||
mcStoreLocal loc84.nCountDown, ecx
|
||||
|
||||
.pre_sequence:
|
||||
mov ecx, 694
|
||||
call TConsole_Cram
|
||||
mcLoadLocal eax, loc84.nCountDown
|
||||
call TConsole_CramInt
|
||||
call TConsole_RefreshCaretLine
|
||||
invoke Sleep, 1000
|
||||
|
||||
dec [esp + loc84.nCountDown]
|
||||
cmp [esp + loc84.nCountDown], 6
|
||||
jae .pre_sequence
|
||||
|
||||
call TConsole_ScrollUp
|
||||
call TConsole_ScrollUp
|
||||
|
||||
mov cl, ATTR_PROMPT_TEXT
|
||||
call TConsole_SetAttr
|
||||
|
||||
mov ecx, 689
|
||||
call TConsole_Prout
|
||||
inc ecx
|
||||
call TConsole_Prout
|
||||
inc ecx
|
||||
call TGame_Prompt
|
||||
call TConsole_ScrollUp
|
||||
|
||||
call TCmdBuf_Scan
|
||||
cmp [ebx + TCmdBuf.cmdbuf_KEY], CMD_TOKEN_EOL
|
||||
je .password_rejected
|
||||
|
||||
mcLoadGameDataPtr edi
|
||||
add edi, TREKDATA.PASSWD
|
||||
call TString_AnsiEqual
|
||||
jnc .password_rejected
|
||||
|
||||
mov ecx, 692
|
||||
call TConsole_ProutGameMsg
|
||||
mov cl, 22
|
||||
call TConsole_RepeatBlank
|
||||
|
||||
.final_sequence:
|
||||
mov ecx, 694
|
||||
call TConsole_Cram
|
||||
mcLoadLocal eax, loc84.nCountDown
|
||||
call TConsole_CramInt
|
||||
call TConsole_RefreshCaretLine
|
||||
invoke Sleep, 1000
|
||||
|
||||
dec [esp + loc84.nCountDown]
|
||||
jnz .final_sequence
|
||||
|
||||
call TConsole_ScrollUp
|
||||
|
||||
fld [glb_dbl_0dot05]
|
||||
call TRandom_Ranf
|
||||
mc_CMP_ST0_ST1
|
||||
jnc .everyone_wasted
|
||||
|
||||
mov ecx, 693
|
||||
call TConsole_ProutGameMsg
|
||||
invoke Sleep, 1000
|
||||
|
||||
.everyone_wasted:
|
||||
call TConsole_ScrollUp
|
||||
call TConsole_ScrollUp
|
||||
call TPlanet_KaBoom
|
||||
jmp .done
|
||||
|
||||
.password_rejected:
|
||||
mov ecx, 695
|
||||
call TConsole_ProutGameMsg
|
||||
inc ecx
|
||||
call TConsole_Prout
|
||||
call TConsole_ScrollUp
|
||||
call TConsole_ScrollUp
|
||||
|
||||
.done:
|
||||
mcEndLocals loc84.size
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; PLAQUE
|
||||
; --------------------------------------------------------------------------
|
||||
virtual at 0
|
||||
loc112:
|
||||
.pNextInByte PCHAR ?
|
||||
.pNextOutByte PCHAR ?
|
||||
.bufAnsiValue CHARS 16
|
||||
.bufAnsiKirkAlias CHARS 32
|
||||
.pAllocatedOutBuffer PCHAR ?
|
||||
.timeNow rb SYSTIME.size
|
||||
.nLenName COUNT ?
|
||||
.size = $
|
||||
end virtual
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TApp_PlaqueProcessor:
|
||||
mcBeginLocals loc112.size
|
||||
|
||||
mov ecx, 727
|
||||
call TGame_Prompt
|
||||
|
||||
call TCmdBuf_Scan
|
||||
cmp [ebx + TCmdBuf.cmdbuf_KEY], CMD_TOKEN_EOL
|
||||
je .done
|
||||
|
||||
mcLoadLocalRef edi, loc112.bufAnsiKirkAlias
|
||||
call TString_AnsiCopy
|
||||
|
||||
mov esi, glb_Plaque
|
||||
invoke HeapAlloc, [glb_Allocator], HEAP_NO_SERIALIZE, 8192 ; <-- 2 pages is enough!
|
||||
mcStoreLocal loc112.pAllocatedOutBuffer, eax
|
||||
mcStoreLocal loc112.pNextOutByte, eax
|
||||
mcStoreLocal loc112.pNextInByte, esi
|
||||
|
||||
.load_input_byte:
|
||||
mcLoadLocal esi, loc112.pNextInByte
|
||||
inc [esp + loc112.pNextInByte]
|
||||
mov al, [esi]
|
||||
|
||||
mcOnRegEqu al, PLAQUE_STRING, .dump_string
|
||||
mcOnRegEqu al, PLAQUE_INSERT_DATE, .dump_date
|
||||
mcOnRegEqu al, PLAQUE_INSERT_KLRATE, .dump_klrate
|
||||
mcOnRegEqu al, PLAQUE_INSERT_LEVEL, .dump_level
|
||||
mcOnRegEqu al, PLAQUE_INSERT_NAME, .dump_captain_name
|
||||
mcOnRegEqu al, PLAQUE_INSERT_SCORE, .dump_score
|
||||
mcOnRegEqu al, PLAQUE_END_OF_LINE, .dump_CR_LF
|
||||
mcOnRegEqu al, PLAQUE_END_OF_ALL, .save
|
||||
;
|
||||
; This byte is a count of charactes defined by next byte
|
||||
;
|
||||
movzx ecx, al
|
||||
mov al, [esi + 1]
|
||||
inc [esp + loc112.pNextInByte]
|
||||
mcLoadLocal edi, loc112.pNextOutByte
|
||||
add [esp + loc112.pNextOutByte], ecx
|
||||
rep stosb
|
||||
jmp .load_input_byte
|
||||
|
||||
.dump_string:
|
||||
;
|
||||
; The next byte is a length of data to be copied
|
||||
;
|
||||
movzx ecx, byte [esi + 1]
|
||||
inc [esp + loc112.pNextInByte]
|
||||
;
|
||||
; Copy data
|
||||
;
|
||||
mcLoadLocal edi, loc112.pNextOutByte
|
||||
mcLoadLocal esi, loc112.pNextInByte
|
||||
add [esp + loc112.pNextInByte], ecx
|
||||
add [esp + loc112.pNextOutByte], ecx
|
||||
rep movsb
|
||||
jmp .load_input_byte
|
||||
|
||||
.dump_date:
|
||||
mcLoadLocalRef edi, loc112.timeNow
|
||||
invoke GetLocalTime, edi
|
||||
|
||||
movzx ecx, word [edi + SYSTIME.wMonth]
|
||||
add ecx, 714
|
||||
call TMsgTable_GetItem
|
||||
|
||||
call TCmdBuf_AnsiStrLen
|
||||
mcLoadLocal edi, loc112.pNextOutByte
|
||||
add [esp + loc112.pNextOutByte], ecx
|
||||
rep movsb
|
||||
|
||||
mov al, ' '
|
||||
stosb
|
||||
inc [esp + loc112.pNextOutByte]
|
||||
|
||||
mcLoadLocalRef esi, loc112.timeNow
|
||||
movzx eax, word [esi + SYSTIME.wDay]
|
||||
mcLoadLocalRef edi, loc112.bufAnsiValue
|
||||
call TFormat_Int32
|
||||
|
||||
mov esi, edi
|
||||
mcLoadLocal edi, loc112.pNextOutByte
|
||||
add [esp + loc112.pNextOutByte], ecx
|
||||
rep movsb
|
||||
|
||||
mov al, ','
|
||||
stosb
|
||||
mov al, ' '
|
||||
stosb
|
||||
add [esp + loc112.pNextOutByte], 2
|
||||
|
||||
mcLoadLocalRef esi, loc112.timeNow
|
||||
movzx eax, word [esi + SYSTIME.wYear]
|
||||
mcLoadLocalRef edi, loc112.bufAnsiValue
|
||||
call TFormat_Int32
|
||||
|
||||
mov esi, edi
|
||||
mcLoadLocal edi, loc112.pNextOutByte
|
||||
add [esp + loc112.pNextOutByte], ecx
|
||||
rep movsb
|
||||
jmp .load_input_byte
|
||||
|
||||
.dump_klrate:
|
||||
mov cl, 2
|
||||
mcLoadLocalRef edi, loc112.bufAnsiValue
|
||||
fld [glb_dbl_KlingonsPerDate]
|
||||
call TFormat_Double
|
||||
|
||||
mov esi, edi
|
||||
mcLoadLocal edi, loc112.pNextOutByte
|
||||
add [esp + loc112.pNextOutByte], ecx
|
||||
rep movsb
|
||||
jmp .load_input_byte
|
||||
|
||||
.dump_level:
|
||||
mcLoadGameDataPtr esi
|
||||
movzx ecx, [esi + TREKDATA.SKILL]
|
||||
add cl, 12
|
||||
call TMsgTable_GetItem
|
||||
|
||||
mcLoadLocal edi, loc112.pNextOutByte
|
||||
mcZeroBits eax
|
||||
mcZeroBits ecx
|
||||
|
||||
.next_level_char:
|
||||
lodsb
|
||||
mcOnRegZero eax, .level_copied
|
||||
|
||||
stosb
|
||||
inc ecx
|
||||
jmp .next_level_char
|
||||
|
||||
.level_copied:
|
||||
add [esp + loc112.pNextOutByte], ecx
|
||||
jmp .load_input_byte
|
||||
|
||||
.dump_captain_name:
|
||||
;
|
||||
; NSKIP = 65 - LEN (NAME)/2
|
||||
;
|
||||
mcLoadLocalRef esi, loc112.bufAnsiKirkAlias
|
||||
call TCmdBuf_AnsiStrLen
|
||||
mcStoreLocal loc112.nLenName, ecx
|
||||
mcLoad8bitsToReg32 eax, 65
|
||||
shr ecx, 1
|
||||
sub eax, ecx
|
||||
|
||||
mov cl, ' '
|
||||
xchg eax, ecx
|
||||
mcLoadLocal edi, loc112.pNextOutByte
|
||||
add [esp + loc112.pNextOutByte], ecx
|
||||
rep stosb
|
||||
|
||||
mcLoadLocalRef esi, loc112.bufAnsiKirkAlias
|
||||
mcLoadLocal ecx, loc112.nLenName
|
||||
add [esp + loc112.pNextOutByte], ecx
|
||||
rep movsb
|
||||
jmp .dump_CR_LF
|
||||
|
||||
.dump_score:
|
||||
mcLoadLocalRef edi, loc112.bufAnsiValue
|
||||
mov eax, [glb_Score]
|
||||
call TFormat_Int32
|
||||
|
||||
mov esi, edi
|
||||
mcLoadLocal edi, loc112.pNextOutByte
|
||||
add [esp + loc112.pNextOutByte], ecx
|
||||
rep movsb
|
||||
jmp .load_input_byte
|
||||
|
||||
.dump_CR_LF:
|
||||
mcLoadLocal edi, loc112.pNextOutByte
|
||||
mov al, 0Dh
|
||||
stosb
|
||||
mov al, 0Ah
|
||||
stosb
|
||||
mcStoreLocal loc112.pNextOutByte, edi
|
||||
jmp .load_input_byte
|
||||
|
||||
.save:
|
||||
invoke CreateFileAnsi, str_PlaqueFile, GENERIC_WRITE, 0, 0,\
|
||||
CREATE_ALWAYS, FILE_FLAG_SEQ_SCAN, 0
|
||||
|
||||
mov ebx, eax
|
||||
mcOnRegEqu ebx, -1, .done
|
||||
|
||||
mcLoadLocal esi, loc112.pAllocatedOutBuffer
|
||||
mcLoadLocalRef edi, loc112.pNextInByte
|
||||
mcLoadLocal ecx, loc112.pNextOutByte
|
||||
sub ecx, esi
|
||||
invoke WriteFile, ebx, esi, ecx, edi, 0
|
||||
invoke CloseHandle, ebx
|
||||
|
||||
call TConsole_SetGameMsgAttr
|
||||
mov cl, 3
|
||||
call TConsole_Skip
|
||||
|
||||
mov ecx, 728
|
||||
call TConsole_Prout
|
||||
inc ecx
|
||||
call TConsole_Prout
|
||||
inc ecx
|
||||
call TConsole_Prout
|
||||
|
||||
mov cl, 3
|
||||
call TConsole_Skip
|
||||
|
||||
.done:
|
||||
mcEndLocals loc112.size
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Output:
|
||||
; CF = TRUE if directory has been set
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TApp_SetLocalDir:
|
||||
mcBeginLocals 260*2
|
||||
|
||||
mov esi, esp
|
||||
invoke GetModuleFileName, 0, esi, 260
|
||||
|
||||
mcZeroBits eax
|
||||
mcZeroBits edi
|
||||
|
||||
.next_char:
|
||||
lodsw
|
||||
mcOnRegZero eax, .set_dir
|
||||
|
||||
cmp al, '\'
|
||||
jne .next_char
|
||||
|
||||
mov edi, esi
|
||||
jmp .next_char
|
||||
|
||||
.set_dir:
|
||||
mcOnRegZero edi, .failed
|
||||
|
||||
stosw
|
||||
invoke SetCurrentDir, esp
|
||||
mcOnRegZero eax, .failed
|
||||
|
||||
.done:
|
||||
mcEndLocals 260*2
|
||||
stc
|
||||
ret
|
||||
|
||||
.failed:
|
||||
invoke MessageBox, 0, str_SetDirFailed, str_MainWndTitle, 10h
|
||||
mcEndLocals 260*2
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Input:
|
||||
; EAX = HDC
|
||||
; --------------------------------------------------------------------------
|
||||
virtual at 0
|
||||
loc1:
|
||||
.hDC HDC ?
|
||||
.hMemDC HDC ?
|
||||
.hSurfaceBmp HBITMAP ?
|
||||
.hDefaultBmp HBITMAP ?
|
||||
.hDefaultFont HFONT ?
|
||||
.rect_Client rb RECT.size
|
||||
.bkMode INT32 ?
|
||||
.size = $
|
||||
end virtual
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TApp_WmPaint:
|
||||
mcBeginLocals loc1.size
|
||||
mcStoreLocal loc1.hDC, eax
|
||||
|
||||
mcLoadLocalRef edi, loc1.rect_Client
|
||||
invoke GetClientRect, [glb_MainWnd], edi
|
||||
|
||||
mcLoadLocal edx, loc1.hDC
|
||||
invoke CreateCompatibleDC, edx
|
||||
mcStoreLocal loc1.hMemDC, eax
|
||||
|
||||
mov ebx, esp
|
||||
invoke CreateCompatibleBitmap, [ebx + loc1.hDC], \
|
||||
dword [ebx + loc1.rect_Client + RECT.rc_Right], \
|
||||
dword [ebx + loc1.rect_Client + RECT.rc_Bottom]
|
||||
|
||||
mcStoreLocal loc1.hSurfaceBmp, eax
|
||||
|
||||
invoke SelectObject, [ebx + loc1.hMemDC], eax
|
||||
mcStoreLocal loc1.hDefaultBmp, eax
|
||||
|
||||
invoke GetStockObject, BLACK_BRUSH
|
||||
mcLoadLocalRef esi, loc1.rect_Client
|
||||
invoke FillRect, [ebx + loc1.hMemDC], esi, eax
|
||||
|
||||
invoke SetBkMode, [ebx + loc1.hMemDC], TRANSPARENT
|
||||
mcStoreLocal loc1.bkMode, eax
|
||||
|
||||
invoke SelectObject, [ebx + loc1.hMemDC], [glb_Font]
|
||||
mcStoreLocal loc1.hDefaultFont, eax
|
||||
|
||||
mcLoadLocal edx, loc1.hMemDC
|
||||
call TConsole_DrawAllLines
|
||||
|
||||
mov ebx, esp
|
||||
invoke SetBkMode, [ebx + loc1.hMemDC], [ebx + loc1.bkMode]
|
||||
invoke SelectObject, [ebx + loc1.hMemDC], [ebx + loc1.hDefaultFont]
|
||||
|
||||
mcZeroBits ecx
|
||||
|
||||
invoke BitBlt, [ebx + loc1.hDC], ecx, ecx, \
|
||||
dword [ebx + loc1.rect_Client + RECT.rc_Right], \
|
||||
dword [ebx + loc1.rect_Client + RECT.rc_Bottom], \
|
||||
[ebx + loc1.hMemDC], ecx, ecx, SRCCOPY
|
||||
|
||||
invoke SelectObject, [ebx + loc1.hMemDC], [ebx + loc1.hDefaultBmp]
|
||||
invoke DeleteObject, [ebx + loc1.hSurfaceBmp]
|
||||
invoke DeleteDC, [ebx + loc1.hMemDC]
|
||||
|
||||
mcEndLocals loc1.size
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Input:
|
||||
; EAX = WCHAR received from user
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TApp_WmChar:
|
||||
and eax, 0FFh
|
||||
|
||||
cmp al, 20h
|
||||
jb .control_char
|
||||
|
||||
cmp al, 'a'
|
||||
jb .draw_symbol
|
||||
cmp al, 'z'
|
||||
ja .draw_symbol
|
||||
|
||||
sub al, 20h
|
||||
|
||||
.draw_symbol:
|
||||
mov cl, ATTR_PROMPT_VALUE
|
||||
call TConsole_SetAttr
|
||||
call TCmdBuf_PutChar
|
||||
call TConsole_PutChar
|
||||
call TConsole_RefreshCaretLine
|
||||
ret
|
||||
|
||||
.backspace:
|
||||
call TCmdBuf_IsEmpty
|
||||
jnc .del_last_char
|
||||
ret
|
||||
|
||||
.del_last_char:
|
||||
call TCmdBuf_Backspace
|
||||
call TConsole_Backspace
|
||||
ret
|
||||
|
||||
.command_complete:
|
||||
call TConsole_ScrollUp
|
||||
call TCmdBuf_Parse
|
||||
lock inc [glb_GameThreadBusy]
|
||||
ret
|
||||
|
||||
.key_escape:
|
||||
ret
|
||||
|
||||
.control_char:
|
||||
cmp al, CHAR_BACKSPACE
|
||||
je .backspace
|
||||
cmp al, CHAR_ENTER
|
||||
je .command_complete
|
||||
cmp al, CHAR_ESC
|
||||
je .key_escape
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TApp_QueryTextSize:
|
||||
invoke GetDC, 0
|
||||
mov esi, eax
|
||||
|
||||
invoke SelectObject, eax, [glb_Font]
|
||||
push eax
|
||||
|
||||
invoke GetTextExtentPoint32, esi, str_CharSizeText, 2, glb_CharSize
|
||||
|
||||
pop edx
|
||||
invoke SelectObject, esi, edx
|
||||
|
||||
invoke ReleaseDC, 0, esi
|
||||
|
||||
shr dword [glb_CharSize + SIZE.size_Width], 1
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Input:
|
||||
; ESI = address of rectangle to redraw
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TApp_RefreshMainWndRect:
|
||||
mov ebx, [glb_MainWnd]
|
||||
invoke InvalidateRect, ebx, esi, 1
|
||||
invoke UpdateWindow, ebx
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TApp_AdjustWndRect:
|
||||
mcBeginLocals RECT.size
|
||||
|
||||
mov esi, esp
|
||||
|
||||
mcZeroBits eax
|
||||
mov [esi + RECT.rc_Left], eax
|
||||
mov [esi + RECT.rc_Top], eax
|
||||
|
||||
mov ecx, dword [glb_CharSize + SIZE.size_Width]
|
||||
imul ecx, CONSOLE_COLS
|
||||
add ecx, 2
|
||||
mov [esi + RECT.rc_Right], ecx
|
||||
|
||||
mov ecx, dword [glb_CharSize + SIZE.size_Height]
|
||||
imul ecx, CONSOLE_ROWS
|
||||
add ecx, 2
|
||||
mov [esi + RECT.rc_Bottom], ecx
|
||||
|
||||
invoke OffsetRect, esi, 200, 32
|
||||
invoke AdjustWindowRect, esi, WS_NOSIZEWND, 0
|
||||
|
||||
mcRectWidth ecx, esi
|
||||
mcRectHeight edx, esi
|
||||
|
||||
invoke MoveWindow, [glb_MainWnd], \
|
||||
[esi + RECT.rc_Left], \
|
||||
[esi + RECT.rc_Top], \
|
||||
ecx, edx, 0
|
||||
|
||||
mcEndLocals RECT.size
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TApp_WmCreate:
|
||||
call TCommon_Allocate
|
||||
call TMsgTable_Load
|
||||
call TCmdBuf_Create
|
||||
call TApp_QueryTextSize
|
||||
call TApp_AdjustWndRect
|
||||
|
||||
invoke PostMessage, [glb_MainWnd], WM_CUSTOM_DO_PRELIM, 0, 0
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Input:
|
||||
; hWnd, uiMsg, WParam, LParam
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TApp_WndProc:
|
||||
mcProlog
|
||||
|
||||
mov eax, uiMsg
|
||||
mcOnRegEqu eax, WM_CREATE, .OnCreate
|
||||
mcOnRegEqu eax, WM_DESTROY, .OnDestroy
|
||||
mcOnRegEqu eax, WM_ERASEBKGND, .OnEraseBkGnd
|
||||
mcOnRegEqu eax, WM_PAINT, .OnPaint
|
||||
mcOnRegEqu eax, WM_CHAR, .OnChar
|
||||
mcOnRegEqu eax, WM_CUSTOM_DO_PRELIM, .StartGameThread
|
||||
|
||||
invoke DefWindowProc, hWnd, uiMsg, WParam, LParam
|
||||
|
||||
.exit:
|
||||
mcEpilog
|
||||
ret 10h
|
||||
|
||||
.StartGameThread:
|
||||
invoke CreateThread, 0, 0, TGame_Thread, 0, 0, 0
|
||||
|
||||
.ret_zero:
|
||||
mcZeroBits eax
|
||||
jmp .exit
|
||||
|
||||
.OnCreate:
|
||||
mov eax, hWnd
|
||||
mov [glb_MainWnd], eax
|
||||
call TApp_WmCreate
|
||||
jmp .ret_zero
|
||||
|
||||
.OnDestroy:
|
||||
invoke PostQuitMessage, 0
|
||||
jmp .ret_zero
|
||||
|
||||
.OnEraseBkGnd:
|
||||
mcLoad1 eax
|
||||
jmp .exit
|
||||
|
||||
.OnPaint:
|
||||
mcBeginLocals PAINTSTRUCT.size
|
||||
invoke BeginPaint, [glb_MainWnd], esp
|
||||
call TApp_WmPaint
|
||||
invoke EndPaint, [glb_MainWnd], esp
|
||||
mcEndLocals PAINTSTRUCT.size
|
||||
jmp .ret_zero
|
||||
|
||||
.OnChar:
|
||||
mcZeroBits eax
|
||||
lock add [glb_GameThreadBusy], eax
|
||||
jnz .ret_zero
|
||||
|
||||
mov eax, WParam
|
||||
call TApp_WmChar
|
||||
jmp .ret_zero
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TApp_CreateFont:
|
||||
mcBeginLocals LOGFONT.size
|
||||
|
||||
mov edi, esp
|
||||
mov ecx, LOGFONT.size
|
||||
mcZeroBits eax
|
||||
rep stosb
|
||||
|
||||
mov edx, FW_NORMAL
|
||||
mov [esp + LOGFONT.lf_Weight], edx
|
||||
|
||||
mov dl, DEFAULT_CHARSET
|
||||
mov [esp + LOGFONT.lf_CharSet], dl
|
||||
|
||||
lea edi, [esp + LOGFONT.lf_FaceName]
|
||||
mov esi, str_FontFace
|
||||
call TString_Copy
|
||||
|
||||
invoke GetDC, 0
|
||||
mov esi, eax
|
||||
invoke GetDeviceCaps, esi, LOGPIXELSY
|
||||
invoke MulDiv, 12, eax, 72
|
||||
|
||||
neg eax
|
||||
mov [esp + LOGFONT.lf_Height], eax
|
||||
invoke ReleaseDC, 0, esi
|
||||
|
||||
invoke CreateFontIndirect, esp
|
||||
mov [glb_Font], eax
|
||||
|
||||
mcEndLocals LOGFONT.size
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TApp_RegisterWnd:
|
||||
mcBeginLocals WNDCLASS.size
|
||||
|
||||
mov ebx, esp
|
||||
|
||||
mcZeroBits ecx
|
||||
mcStoreMember WNDCLASS.wc_lpszMenuName, ecx
|
||||
mcStoreMember WNDCLASS.wc_cbClsExtra, ecx
|
||||
mcStoreMember WNDCLASS.wc_cbWndExtra, ecx
|
||||
mcStoreMember WNDCLASS.wc_hbrBackground, ecx
|
||||
|
||||
invoke LoadCursor, 0, IDC_ARROW
|
||||
mcStoreMember WNDCLASS.wc_hCursor, eax
|
||||
|
||||
invoke LoadIcon, 0, IDI_EXCLAMATION
|
||||
mcStoreMember WNDCLASS.wc_hIcon, eax
|
||||
|
||||
mov eax, [glb_Instance]
|
||||
mcStoreMember WNDCLASS.wc_hInstance, eax
|
||||
|
||||
mov eax, TApp_WndProc
|
||||
mcStoreMember WNDCLASS.wc_lpfnWndProc, eax
|
||||
|
||||
mov eax, str_MainWndClass
|
||||
mcStoreMember WNDCLASS.wc_lpszClassName, eax
|
||||
|
||||
invoke RegisterClass, ebx
|
||||
|
||||
mcEndLocals WNDCLASS.size
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TApp_CreateMainWnd:
|
||||
invoke CreateWindowEx, WS_EX_APPWINDOW, str_MainWndClass, \
|
||||
str_MainWndTitle, WS_NOSIZEWND, \
|
||||
80, 40, 500, 500, \
|
||||
0, 0, [glb_Instance], 0
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TApp_Init:
|
||||
invoke GetModuleHandle, 0
|
||||
mov [glb_Instance], eax
|
||||
|
||||
invoke HeapCreate, HEAP_NO_SERIALIZE, 0x20000, 0
|
||||
mov [glb_Allocator], eax
|
||||
|
||||
call TRandom_Create
|
||||
call TApp_RegisterWnd
|
||||
call TApp_CreateFont
|
||||
call TApp_CreateMainWnd
|
||||
call TConsole_Create
|
||||
call TLog_Create
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TApp_Run:
|
||||
mcBeginLocals MSG.size
|
||||
|
||||
mov esi, [glb_MainWnd]
|
||||
invoke ShowWindow, esi, SW_SHOWNORMAL
|
||||
invoke UpdateWindow, esi
|
||||
|
||||
@@:
|
||||
mcZeroBits eax
|
||||
mov edi, esp
|
||||
invoke GetMessage, edi, eax, eax, eax
|
||||
mcOnRegZero eax, .done
|
||||
|
||||
invoke TranslateMessage, edi
|
||||
invoke DispatchMessage, edi
|
||||
jmp @r
|
||||
|
||||
.done:
|
||||
call TLog_Disable
|
||||
|
||||
mcEndLocals MSG.size
|
||||
ret
|
||||
|
||||
; --- EOF ---
|
@ -1,677 +0,0 @@
|
||||
; --------------------------------------------------------------------------
|
||||
; FILE: TArray.Asm
|
||||
; DATE: October 4, 2008
|
||||
; --------------------------------------------------------------------------
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; LEAVE
|
||||
; --------------------------------------------------------------------------
|
||||
; Input:
|
||||
; ECX = 1-based index (IESC) of the leaving enemy
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TArray_Leave:
|
||||
pushad
|
||||
|
||||
mcLoadGameDataPtr ebx
|
||||
movzx edx, [ebx + TREKDATA.NENHERE]
|
||||
dec edx
|
||||
dec ecx
|
||||
|
||||
mcLoadMemberRef edi, TREKDATA.KX
|
||||
mov al, [edi + edx]
|
||||
mov [edi + ecx], al
|
||||
|
||||
mcLoadMemberRef edi, TREKDATA.KY
|
||||
mov al, [edi + edx]
|
||||
mov [edi + ecx], al
|
||||
|
||||
imul ecx, 10
|
||||
imul edx, 10
|
||||
|
||||
mcLoadMemberRef edi, TREKDATA.KPOWER
|
||||
fld tbyte [edi + edx]
|
||||
fstp tbyte [edi + ecx]
|
||||
|
||||
mcLoadMemberRef edi, TREKDATA.KDIST
|
||||
fld tbyte [edi + edx]
|
||||
fstp tbyte [edi + ecx]
|
||||
|
||||
dec [ebx + TREKDATA.KLHERE]
|
||||
dec [ebx + TREKDATA.NENHERE]
|
||||
|
||||
cmp [ebx + TREKDATA.CONDIT], CONDITION_DOCKED
|
||||
je .done
|
||||
|
||||
call TCommon_NewCondition
|
||||
|
||||
.done:
|
||||
popad
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Input:
|
||||
; EDI = array relative offset
|
||||
; ECX = 1-based index of DOUBLE cell
|
||||
; ST(0) = value to store
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TArray_SetDouble:
|
||||
push eax ecx
|
||||
movzx ecx, cl
|
||||
dec ecx
|
||||
imul ecx, 10
|
||||
mcLoadGameDataPtr eax
|
||||
add edi, eax
|
||||
fstp tbyte [edi + ecx]
|
||||
pop ecx eax
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Input:
|
||||
; CL = 1-based index of KPOWER cell
|
||||
; Output:
|
||||
; EDX = address of that DOUBLE cell
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TArray_KlingonPowerPtr:
|
||||
push ecx
|
||||
movzx ecx, cl
|
||||
mcLoadGameDataPtr edx
|
||||
add edx, TREKDATA.KPOWER
|
||||
dec ecx
|
||||
imul ecx, 10
|
||||
add edx, ecx
|
||||
pop ecx
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Input:
|
||||
; EDI = array relative offset
|
||||
; CL = 1-based index of DOUBLE cell
|
||||
; Output:
|
||||
; ST(0) = loaded value
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TArray_GetDouble:
|
||||
push eax ecx
|
||||
movzx ecx, cl
|
||||
dec ecx
|
||||
imul ecx, 10
|
||||
mcLoadGameDataPtr eax
|
||||
add edi, eax
|
||||
fld tbyte [edi + ecx]
|
||||
pop ecx eax
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Input:
|
||||
; CL = 1-based index of DAMAGE cell
|
||||
; Output:
|
||||
; ST(0) = loaded value
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TArray_GetDblDamage:
|
||||
push edi
|
||||
mcLoad8bitsToReg32 edi, TREKDATA.DAMAGE
|
||||
call TArray_GetDouble
|
||||
pop edi
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Input:
|
||||
; CL = 1-based index of DEVICE
|
||||
; Output:
|
||||
; CF=1 if device is damaged
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TArray_IsDamaged:
|
||||
call TArray_GetDblDamage
|
||||
fldz
|
||||
mc_CMP_ST0_ST1
|
||||
jz .no_damage
|
||||
|
||||
stc
|
||||
ret
|
||||
|
||||
.no_damage:
|
||||
clc
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Input:
|
||||
; ECX = 1-based index of KPOWER cell
|
||||
; Output:
|
||||
; ST(0) = loaded value
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TArray_GetDblKPower:
|
||||
push edi
|
||||
mcLoad8bitsToReg32 edi, TREKDATA.KPOWER
|
||||
call TArray_GetDouble
|
||||
pop edi
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Input:
|
||||
; ECX = 1-based index of KDIST cell
|
||||
; Output:
|
||||
; ST(0) = loaded value
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TArray_GetDblKDist:
|
||||
push edi
|
||||
mcLoad8bitsToReg32 edi, TREKDATA.KDIST
|
||||
call TArray_GetDouble
|
||||
pop edi
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Input:
|
||||
; ECX = 1-based index of DAMAGE cell
|
||||
; ST(0) = value to store
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TArray_SetDblDamage:
|
||||
push edi
|
||||
mcLoad8bitsToReg32 edi, TREKDATA.DAMAGE
|
||||
call TArray_SetDouble
|
||||
pop edi
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Input:
|
||||
; ECX = 1-based index of KPOWER cell
|
||||
; ST(0) = value to store
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TArray_SetDblKPower:
|
||||
push edi
|
||||
mcLoad8bitsToReg32 edi, TREKDATA.KPOWER
|
||||
call TArray_SetDouble
|
||||
pop edi
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Input:
|
||||
; ECX = 1-based index of KDIST cell
|
||||
; ST(0) = value to store
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TArray_SetDblKDist:
|
||||
push edi
|
||||
mcLoad8bitsToReg32 edi, TREKDATA.KDIST
|
||||
call TArray_SetDouble
|
||||
pop edi
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Input:
|
||||
; AL = X coordinate in range [1..10]
|
||||
; DL = Y coordinate in range [1..10]
|
||||
; Output:
|
||||
; EBX = address of QUAD (X,Y)
|
||||
; NOTE:
|
||||
; Coordinates are preserved during the call
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TArray_QuadPtr:
|
||||
push eax ecx edx
|
||||
;
|
||||
; I = (X-1)*10 + (Y-1)
|
||||
;
|
||||
dec al
|
||||
dec dl
|
||||
cbw
|
||||
imul ax, 10
|
||||
add al, dl
|
||||
movzx ecx, al
|
||||
;
|
||||
; Load address into EBX
|
||||
;
|
||||
mov ebx, [glb_pGameData]
|
||||
lea ebx, [ebx + ecx + TREKDATA.QUAD]
|
||||
|
||||
pop edx ecx eax
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Output:
|
||||
; CF=TRUE if CHAR_WEB is the only element encountered around
|
||||
; the quadrant edges.
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TArray_IsWebComplete:
|
||||
;
|
||||
; Check the way from sector 1-1 to sector 1-10
|
||||
;
|
||||
mcLoad1 eax
|
||||
mov edx, eax
|
||||
call TArray_QuadPtr
|
||||
|
||||
mcLoad8bitsToReg32 ecx, 10
|
||||
mov al, CHAR_WEB
|
||||
|
||||
.check_1:
|
||||
cmp [ebx], al
|
||||
jne .return_false
|
||||
inc ebx
|
||||
loop .check_1
|
||||
;
|
||||
; Check the way from sector 10-1 to sector 10-10
|
||||
;
|
||||
mov al, 10
|
||||
mov dl, 1
|
||||
call TArray_QuadPtr
|
||||
|
||||
mcLoad8bitsToReg32 ecx, 10
|
||||
mov al, CHAR_WEB
|
||||
|
||||
.check_2:
|
||||
cmp [ebx], al
|
||||
jne .return_false
|
||||
inc ebx
|
||||
loop .check_2
|
||||
;
|
||||
; Check the vertical ways:
|
||||
; 1. From sector 1-1 to sector 10-1
|
||||
; 2. From sector 1-10 to sector 10-10
|
||||
;
|
||||
mov al, 2
|
||||
mov dl, 1
|
||||
call TArray_QuadPtr
|
||||
|
||||
mcLoad8bitsToReg32 ecx, 8
|
||||
mov al, CHAR_WEB
|
||||
|
||||
.check_3:
|
||||
cmp [ebx], al
|
||||
jne .return_false
|
||||
cmp [ebx + 9], al
|
||||
jne .return_false
|
||||
|
||||
add ebx, 10
|
||||
loop .check_3
|
||||
;
|
||||
; All plugged!
|
||||
;
|
||||
stc
|
||||
ret
|
||||
|
||||
.return_false:
|
||||
clc
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TArray_SetShip:
|
||||
mcLoadGameDataPtr ebx
|
||||
mcLoadMember al, TREKDATA.SECTX
|
||||
mcLoadMember dl, TREKDATA.SECTY
|
||||
push ebx
|
||||
call TArray_QuadPtr
|
||||
pop esi
|
||||
|
||||
mov al, [esi + TREKDATA.SHIP]
|
||||
mov [ebx], al
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Input:
|
||||
; AL = X coordinate in range [1..8]
|
||||
; DL = Y coordinate in range [1..8]
|
||||
; Output:
|
||||
; ECX = index into array (NOT OFFSET)
|
||||
; NOTE:
|
||||
; Coordinates are preserved during the call
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TArray_8x8Index:
|
||||
;
|
||||
; In STAR TREK cosmos: coordinate X is row and
|
||||
; coordinate Y is column in the matrix, so
|
||||
; index is calculated as:
|
||||
;
|
||||
; I = (X-1)*8 + (Y-1)
|
||||
;
|
||||
push eax edx
|
||||
dec al
|
||||
dec dl
|
||||
shl al, 3
|
||||
add al, dl
|
||||
movzx ecx, al
|
||||
pop edx eax
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Input:
|
||||
; AL = X coordinate in range [1..8]
|
||||
; DL = Y coordinate in range [1..8]
|
||||
; Output:
|
||||
; EBX = address of SCANNED (8,8) cell
|
||||
; NOTE:
|
||||
; All registers are preserved
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TArray_ScannedQuadPtr:
|
||||
push ecx
|
||||
call TArray_8x8Index
|
||||
mov ebx, [glb_pGameData]
|
||||
lea ebx, [ebx + ecx + TREKDATA.SCANNED]
|
||||
pop ecx
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Input:
|
||||
; AL = X coordinate in range [1..8]
|
||||
; DL = Y coordinate in range [1..8]
|
||||
; NOTE:
|
||||
; All registers are preserved
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TArray_SetScanned:
|
||||
push ebx
|
||||
call TArray_ScannedQuadPtr
|
||||
mov byte [ebx], 1
|
||||
pop ebx
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Input:
|
||||
; AL = X coordinate in range [1..8]
|
||||
; DL = Y coordinate in range [1..8]
|
||||
; Output:
|
||||
; CF=TRUE if quadrant was scanned by SRSCAN command
|
||||
; NOTE:
|
||||
; All registers are preserved
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TArray_IsScanned:
|
||||
push eax
|
||||
push ebx
|
||||
call TArray_ScannedQuadPtr
|
||||
mov al, [ebx]
|
||||
pop ebx
|
||||
shr al, 1
|
||||
pop eax
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Input:
|
||||
; AL = X coordinate in range [1..8]
|
||||
; DL = Y coordinate in range [1..8]
|
||||
; Output:
|
||||
; EBX = address of NEWSTUF (8,8) cell
|
||||
; NOTE:
|
||||
; All registers are preserved
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TArray_NewStufPtr:
|
||||
push ecx
|
||||
call TArray_8x8Index
|
||||
mov ebx, [glb_pGameData]
|
||||
lea ebx, [ebx + ecx + TREKDATA.NEWSTUF]
|
||||
pop ecx
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Output:
|
||||
; EBX = address of NEWSTUF (QUADX,QUADY) cell
|
||||
; NOTE:
|
||||
; All registers are preserved
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TArray_MyNewStufPtr:
|
||||
push eax edx esi
|
||||
mov esi, [glb_pGameData]
|
||||
mov al, [esi + TREKDATA.QUADX]
|
||||
mov dl, [esi + TREKDATA.QUADY]
|
||||
call TArray_NewStufPtr
|
||||
pop esi edx eax
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Input:
|
||||
; AL = X coordinate in range [1..8]
|
||||
; DL = Y coordinate in range [1..8]
|
||||
; Output:
|
||||
; EBX = address of GALAXY (8,8) cell
|
||||
; NOTE:
|
||||
; All registers are preserved
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TArray_GalaxyPtr:
|
||||
push ecx
|
||||
call TArray_8x8Index
|
||||
mov ebx, [glb_pGameData]
|
||||
lea ebx, [ebx + ecx*4 + TREKDATA.GALAXY]
|
||||
pop ecx
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Input:
|
||||
; AL = quadrant X coordinate in range [1..8]
|
||||
; DL = quadrant Y coordinate in range [1..8]
|
||||
; ESI = TPlanet address
|
||||
; Output:
|
||||
; CF=1 if location is matching PLNETS array item
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TArray_IsPlanetHere:
|
||||
cmp [esi + TPlanet.planet_X], al
|
||||
jne .ret_false
|
||||
|
||||
cmp [esi + TPlanet.planet_Y], dl
|
||||
jne .ret_false
|
||||
|
||||
stc
|
||||
ret
|
||||
|
||||
.ret_false:
|
||||
clc
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Input:
|
||||
; AL = quadrant X coordinate in range [1..8]
|
||||
; DL = quadrant Y coordinate in range [1..8]
|
||||
; ECX = commander index (1-based)
|
||||
; Output:
|
||||
; CF=1 if location is matching CX,CY arrays
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TArray_IsCommanderHere:
|
||||
push ebx ecx esi edi
|
||||
mcLoadGameDataPtr ebx
|
||||
|
||||
mcLoadMemberRef esi, TREKDATA.CX
|
||||
mcLoadMemberRef edi, TREKDATA.CY
|
||||
dec ecx
|
||||
|
||||
cmp [esi + ecx], al
|
||||
jne .ret_false
|
||||
|
||||
cmp [edi + ecx], dl
|
||||
jne .ret_false
|
||||
|
||||
pop edi esi ecx ebx
|
||||
stc
|
||||
ret
|
||||
|
||||
.ret_false:
|
||||
pop edi esi ecx ebx
|
||||
clc
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Input:
|
||||
; AL = quadrant X coordinate in range [1..8]
|
||||
; DL = quadrant Y coordinate in range [1..8]
|
||||
; Output:
|
||||
; ECX = 1-based index into PLNETS array or zero
|
||||
; ESI = address of TPlanet structure
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TArray_FindPlanet:
|
||||
mcLoadGameDataPtr ebx
|
||||
mcLoadMemberRef esi, TREKDATA.PLNETS
|
||||
mcLoad1 ecx
|
||||
|
||||
.check_planet:
|
||||
call TArray_IsPlanetHere
|
||||
jc .done
|
||||
|
||||
inc ecx
|
||||
cmp cl, [ebx + TREKDATA.INPLAN]
|
||||
ja .ret_false
|
||||
|
||||
add esi, TPlanet.size
|
||||
jmp .check_planet
|
||||
|
||||
.ret_false:
|
||||
mcZeroBits ecx
|
||||
|
||||
.done:
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Input:
|
||||
; AL = quadrant X coordinate in range [1..8]
|
||||
; DL = quadrant Y coordinate in range [1..8]
|
||||
; Output:
|
||||
; ECX = 1-based index into CX,CY arrays or zero
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TArray_FindCommander:
|
||||
mcLoadGameDataPtr esi
|
||||
mcLoad1 ecx
|
||||
|
||||
.scan:
|
||||
call TArray_IsCommanderHere
|
||||
jc .found_it
|
||||
|
||||
inc ecx
|
||||
cmp cl, [esi + TREKDATA.REMCOM]
|
||||
jbe .scan
|
||||
|
||||
mcZeroBits ecx
|
||||
|
||||
.found_it:
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Input:
|
||||
; ECX = planet index (1-based)
|
||||
; Output:
|
||||
; EDI = address of TPlanet structure
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TArray_PlanetPtr:
|
||||
dec ecx
|
||||
mcLoadGameDataPtr edi
|
||||
imul ecx, TPlanet.size
|
||||
lea edi, [edi + ecx + TREKDATA.PLNETS]
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Output:
|
||||
; EBX = address of GALAXY (QUADX,QUADY) cell
|
||||
; NOTE:
|
||||
; All registers are preserved
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TArray_MyGalaxyPtr:
|
||||
push eax edx esi
|
||||
mov esi, [glb_pGameData]
|
||||
mov al, [esi + TREKDATA.QUADX]
|
||||
mov dl, [esi + TREKDATA.QUADY]
|
||||
call TArray_GalaxyPtr
|
||||
pop esi edx eax
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Input:
|
||||
; AL = X coordinate in range [1..8]
|
||||
; DL = Y coordinate in range [1..8]
|
||||
; Output:
|
||||
; EBX = address of STARCH (8,8) cell
|
||||
; NOTE:
|
||||
; All registers are preserved
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TArray_StarChartPtr:
|
||||
push ecx
|
||||
call TArray_8x8Index
|
||||
mov ebx, [glb_pGameData]
|
||||
lea ebx, [ebx + ecx*4 + TREKDATA.STARCH]
|
||||
pop ecx
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Input:
|
||||
; AL = X coordinate in range [1..8]
|
||||
; DL = Y coordinate in range [1..8]
|
||||
; Output:
|
||||
; ECX = value of STARCH (8,8) cell
|
||||
; NOTE:
|
||||
; All registers are preserved
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TArray_GetStarChartValue:
|
||||
push ebx
|
||||
call TArray_StarChartPtr
|
||||
mov ecx, [ebx]
|
||||
pop ebx
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Input:
|
||||
; AL = X coordinate in range [1..8]
|
||||
; DL = Y coordinate in range [1..8]
|
||||
; Output:
|
||||
; ECX = value of GALAXY (8,8) cell
|
||||
; NOTE:
|
||||
; All registers are preserved
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TArray_GetGalaxyValue:
|
||||
push ebx
|
||||
call TArray_GalaxyPtr
|
||||
mov ecx, [ebx]
|
||||
pop ebx
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Input:
|
||||
; AL = X coordinate in range [1..8]
|
||||
; DL = Y coordinate in range [1..8]
|
||||
; ECX = value to set at STARCH (8,8) cell
|
||||
; NOTE:
|
||||
; All registers are preserved
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TArray_SetStarChartValue:
|
||||
push ebx
|
||||
call TArray_StarChartPtr
|
||||
mov [ebx], ecx
|
||||
pop ebx
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Input:
|
||||
; AL = X coordinate in range [1..8]
|
||||
; DL = Y coordinate in range [1..8]
|
||||
; ECX = value to set at GALAXY (8,8) cell
|
||||
; NOTE:
|
||||
; All registers are preserved
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TArray_SetGalaxyValue:
|
||||
push ebx
|
||||
call TArray_GalaxyPtr
|
||||
mov [ebx], ecx
|
||||
pop ebx
|
||||
ret
|
||||
|
||||
|
||||
; --- EOF ---
|
File diff suppressed because it is too large
Load Diff
@ -1,317 +0,0 @@
|
||||
; --------------------------------------------------------------------------
|
||||
; FILE: TChart.Asm
|
||||
; DATE: October 12, 2008
|
||||
; --------------------------------------------------------------------------
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Input:
|
||||
; EAX = X quadrant coordinate
|
||||
; EDX = Y quadrant coordinate
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TChart_SetQuadAttr:
|
||||
push ebx ecx
|
||||
|
||||
mcLoadGameDataPtr ebx
|
||||
cmp al, [ebx + TREKDATA.QUADX]
|
||||
jne .no_ship_here
|
||||
cmp dl, [ebx + TREKDATA.QUADY]
|
||||
je .ship_here
|
||||
|
||||
.no_ship_here:
|
||||
call TArray_IsScanned
|
||||
jc .set_scanned_color
|
||||
|
||||
mov cl, ATTR_REPORT_VALUE
|
||||
jmp .apply
|
||||
|
||||
.set_scanned_color:
|
||||
mov cl, ATTR_PLANET
|
||||
jmp .apply
|
||||
|
||||
.ship_here:
|
||||
mov cl, ATTR_SHIP_QUAD
|
||||
|
||||
.apply:
|
||||
call TConsole_SetAttr
|
||||
pop ecx ebx
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; CHART
|
||||
; --------------------------------------------------------------------------
|
||||
virtual at 0
|
||||
loc25:
|
||||
.nI INDEX ?
|
||||
.nJ INDEX ?
|
||||
.size = $
|
||||
end virtual
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TChart_Main:
|
||||
mcBeginLocals loc25.size
|
||||
|
||||
mov cl, ATTR_REPORT_TEXT
|
||||
call TConsole_SetAttr
|
||||
mcLoad8bitsToReg32 ecx, 136
|
||||
call TConsole_Prout
|
||||
|
||||
mov cl, ATTR_SCAN_SCALE
|
||||
call TConsole_SetAttr
|
||||
mcLoad8bitsToReg32 ecx, 137
|
||||
call TConsole_Prout
|
||||
mcLoad8bitsToReg32 ecx, 138
|
||||
call TConsole_Prout
|
||||
mcLoad8bitsToReg32 ecx, 139
|
||||
call TConsole_Prout
|
||||
|
||||
mcLoad1 eax
|
||||
mcStoreLocal loc25.nI, eax
|
||||
|
||||
.row_begins:
|
||||
mov cl, ATTR_SCAN_SCALE
|
||||
call TConsole_SetAttr
|
||||
|
||||
mcLoadLocal eax, loc25.nI
|
||||
call TConsole_CramInt
|
||||
mcLoad8bitsToReg32 ecx, 140
|
||||
call TConsole_Cram
|
||||
|
||||
mcLoad1 ecx
|
||||
mcStoreLocal loc25.nJ, ecx
|
||||
|
||||
.load_chart_value:
|
||||
mcLoadLocal eax, loc25.nI
|
||||
mcLoadLocal edx, loc25.nJ
|
||||
|
||||
call TChart_SetQuadAttr
|
||||
|
||||
call TArray_GetStarChartValue
|
||||
add ecx, 0
|
||||
js .L10
|
||||
jz .L20
|
||||
|
||||
cmp ecx, 999
|
||||
ja .L35
|
||||
|
||||
call TArray_GetGalaxyValue
|
||||
mov eax, ecx
|
||||
|
||||
.put_value:
|
||||
mov cl, 5
|
||||
call TConsole_CramIntWidth
|
||||
jmp .L40
|
||||
|
||||
.L35:
|
||||
lea eax, [ecx - 1000]
|
||||
jmp .put_value
|
||||
|
||||
.L40:
|
||||
inc [esp + loc25.nJ]
|
||||
cmp [esp + loc25.nJ], 8
|
||||
jbe .load_chart_value
|
||||
|
||||
mov cl, ATTR_SCAN_SCALE
|
||||
call TConsole_SetAttr
|
||||
call TConsole_ScrollUp
|
||||
mcLoad8bitsToReg32 ecx, 139
|
||||
call TConsole_Prout
|
||||
|
||||
inc [esp + loc25.nI]
|
||||
cmp [esp + loc25.nI], 8
|
||||
jbe .row_begins
|
||||
|
||||
call TConsole_ScrollUp
|
||||
mov cl, ATTR_REPORT_TEXT
|
||||
call TConsole_SetAttr
|
||||
mov cl, 2
|
||||
call TConsole_RepeatBlank
|
||||
call TConsole_CramShip
|
||||
mcLoad8bitsToReg32 ecx, 143
|
||||
call TConsole_Cram
|
||||
mov cl, 1
|
||||
mcLoadGameDataPtr esi
|
||||
mov al, [esi + TREKDATA.QUADX]
|
||||
mov dl, [esi + TREKDATA.QUADY]
|
||||
call TConsole_CramLoc
|
||||
jmp .done
|
||||
|
||||
.L10:
|
||||
mcLoad8bitsToReg32 ecx, 141
|
||||
|
||||
.L101:
|
||||
call TConsole_Cram
|
||||
jmp .L40
|
||||
|
||||
.L20:
|
||||
mcLoad8bitsToReg32 ecx, 142
|
||||
jmp .L101
|
||||
|
||||
.done:
|
||||
call TConsole_ScrollUp
|
||||
call TConsole_ScrollUp
|
||||
|
||||
mcEndLocals loc25.size
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; SETWARP
|
||||
; --------------------------------------------------------------------------
|
||||
virtual at 0
|
||||
loc51:
|
||||
.pTrekData PVOID ?
|
||||
.dbl_OLDFAC DOUBLE ?
|
||||
.dbl_FNUM DOUBLE ?
|
||||
.size = $
|
||||
end virtual
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TChart_SetWarp:
|
||||
mcBeginLocals loc51.size
|
||||
|
||||
mcLoadGameDataPtr esi
|
||||
mcStoreLocal loc51.pTrekData, esi
|
||||
|
||||
.L10:
|
||||
call TCmdBuf_Scan
|
||||
cmp [ebx + TCmdBuf.cmdbuf_KEY], CMD_TOKEN_EOL
|
||||
jne .L20
|
||||
|
||||
mov ecx, 585
|
||||
call TGame_Prompt
|
||||
jmp .L10
|
||||
|
||||
.L20:
|
||||
cmp [ebx + TCmdBuf.cmdbuf_KEY], CMD_TOKEN_REAL
|
||||
jne .L40
|
||||
|
||||
fld [ebx + TCmdBuf.cmdbuf_FNUM]
|
||||
fstp [esp + loc51.dbl_FNUM]
|
||||
|
||||
mov cl, DEV_WARP_ENGINES
|
||||
call TArray_GetDblDamage
|
||||
fld [glb_dbl_Ten]
|
||||
mc_CMP_ST0_ST1
|
||||
jc .L70
|
||||
|
||||
mov cl, DEV_WARP_ENGINES
|
||||
call TArray_IsDamaged
|
||||
jnc .validate_warp
|
||||
|
||||
fld [esp + loc51.dbl_FNUM]
|
||||
fld [glb_dbl_4]
|
||||
mc_CMP_ST0_ST1
|
||||
jc .L80
|
||||
|
||||
.validate_warp:
|
||||
fld1
|
||||
fld [esp + loc51.dbl_FNUM]
|
||||
mc_CMP_ST0_ST1
|
||||
jc .L50
|
||||
|
||||
fld [esp + loc51.dbl_FNUM]
|
||||
fld [glb_dbl_Ten]
|
||||
mc_CMP_ST0_ST1
|
||||
jc .L60
|
||||
|
||||
mcLoadLocal esi, loc51.pTrekData
|
||||
fld [esi + TREKDATA.WARPFAC]
|
||||
fstp [esp + loc51.dbl_OLDFAC]
|
||||
|
||||
fld [esp + loc51.dbl_FNUM]
|
||||
fstp [esi + TREKDATA.WARPFAC]
|
||||
|
||||
fld [esp + loc51.dbl_FNUM]
|
||||
fld st
|
||||
fmulp
|
||||
fstp [esi + TREKDATA.WFACSQ]
|
||||
|
||||
fld [esp + loc51.dbl_OLDFAC]
|
||||
fld [esi + TREKDATA.WARPFAC]
|
||||
mc_CMP_ST0_ST1
|
||||
jc .L31
|
||||
jz .L31
|
||||
|
||||
fld [glb_dbl_6]
|
||||
fld [esi + TREKDATA.WARPFAC]
|
||||
mc_CMP_ST0_ST1
|
||||
jc .L31
|
||||
jz .L31
|
||||
|
||||
fld [glb_dbl_8]
|
||||
fld [esi + TREKDATA.WARPFAC]
|
||||
mc_CMP_ST0_ST1
|
||||
jc .L32
|
||||
jmp .L33
|
||||
|
||||
.L31:
|
||||
call TConsole_SetCrewMsgAttr
|
||||
mov ecx, 586
|
||||
call TConsole_Cram
|
||||
|
||||
mcLoadLocal esi, loc51.pTrekData
|
||||
fld [esi + TREKDATA.WARPFAC]
|
||||
mov cl, 1
|
||||
call TConsole_CramFloat
|
||||
|
||||
mov ecx, 587
|
||||
call TConsole_Prout
|
||||
jmp .done
|
||||
|
||||
.L32:
|
||||
call TConsole_SetCrewMsgAttr
|
||||
mov ecx, 588
|
||||
call TConsole_Prout
|
||||
jmp .done
|
||||
|
||||
.L33:
|
||||
mcLoadLocal esi, loc51.pTrekData
|
||||
fld [esi + TREKDATA.WARPFAC]
|
||||
fld [glb_dbl_Ten]
|
||||
mc_CMP_ST0_ST1
|
||||
jz .L36
|
||||
|
||||
call TConsole_SetCrewMsgAttr
|
||||
mov ecx, 589
|
||||
call TConsole_Prout
|
||||
jmp .done
|
||||
|
||||
.L36:
|
||||
call TConsole_SetCrewMsgAttr
|
||||
mov ecx, 590
|
||||
call TConsole_Prout
|
||||
jmp .done
|
||||
|
||||
.L40:
|
||||
call TMove_BegPardon
|
||||
jmp .done
|
||||
|
||||
.L50:
|
||||
call TConsole_SetCrewMsgAttr
|
||||
mov ecx, 591
|
||||
call TConsole_Prout
|
||||
jmp .done
|
||||
|
||||
.L60:
|
||||
call TConsole_SetCrewMsgAttr
|
||||
mov ecx, 592
|
||||
call TConsole_Prout
|
||||
jmp .done
|
||||
|
||||
.L70:
|
||||
mov ecx, 593
|
||||
call TConsole_ProutGameMsg
|
||||
jmp .done
|
||||
|
||||
.L80:
|
||||
call TConsole_SetCrewMsgAttr
|
||||
mov ecx, 594
|
||||
call TConsole_Prout
|
||||
mov ecx, 595
|
||||
call TConsole_Prout
|
||||
|
||||
.done:
|
||||
mcEndLocals loc51.size
|
||||
ret
|
||||
|
||||
; --- EOF ---
|
@ -1,529 +0,0 @@
|
||||
; --------------------------------------------------------------------------
|
||||
; FILE: TCmdBuf.Asm
|
||||
; DATE: September 27, 2008
|
||||
; --------------------------------------------------------------------------
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Input:
|
||||
; ESI = ANSI token scanned
|
||||
; CL = ANSI text to match (1-based index into message table)
|
||||
; Output:
|
||||
; CF=TRUE if first token exactly matches text at index in CL
|
||||
; CF=FALSE if no match (message given to the user)
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TCmdBuf_VerifyToken:
|
||||
movzx ecx, cl
|
||||
|
||||
TCmdBuf_VerifyToken_ECX:
|
||||
push esi
|
||||
call TMsgTable_GetItem
|
||||
pop edi
|
||||
|
||||
call TString_AnsiEqual
|
||||
jnc .ret_false
|
||||
ret
|
||||
|
||||
.ret_false:
|
||||
call TConsole_ScrollUp
|
||||
call TConsole_SetGameMsgAttr
|
||||
mcLoad8bitsToReg32 ecx, 93
|
||||
call TConsole_Prout
|
||||
call TConsole_ScrollUp
|
||||
|
||||
clc
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Input:
|
||||
; ESI = ANSI token scanned
|
||||
; ECX = ANSI text to match (1-based index into message table)
|
||||
; Output:
|
||||
; CF=TRUE if text at EDI has a prefix like ESI
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TCmdBuf_Crop:
|
||||
push esi esi
|
||||
call TMsgTable_GetItem
|
||||
mov edi, esi
|
||||
pop esi
|
||||
|
||||
mcZeroBits edx
|
||||
mcZeroBits eax
|
||||
|
||||
.load_chars:
|
||||
lodsb
|
||||
mov dl, [edi]
|
||||
inc edi
|
||||
|
||||
cmp dl, al
|
||||
je .check_zero
|
||||
|
||||
mcOnRegZero eax, .match
|
||||
|
||||
pop esi
|
||||
clc
|
||||
ret
|
||||
|
||||
.check_zero:
|
||||
mcOnRegNotZero eax, .load_chars
|
||||
|
||||
.match:
|
||||
pop esi
|
||||
stc
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Input:
|
||||
; AX = WCHAR to append
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TCmdBuf_PutChar:
|
||||
mov ebx, [glb_pCmdBuf]
|
||||
cmp [ebx + TCmdBuf.cmdbuf_CmdColumn], CMDBUF_MAX_CHARS
|
||||
je .done
|
||||
|
||||
mcLoadMember ecx, TCmdBuf.cmdbuf_CmdColumn
|
||||
mov [ebx + ecx*2], ax
|
||||
inc [ebx + TCmdBuf.cmdbuf_CmdColumn]
|
||||
|
||||
.done:
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TCmdBuf_Parse:
|
||||
mcZeroBits eax
|
||||
call TCmdBuf_PutChar
|
||||
|
||||
mov ebx, [glb_pCmdBuf]
|
||||
mcStoreMember TCmdBuf.cmdbuf_NumTokens, eax
|
||||
mcStoreMember TCmdBuf.cmdbuf_CmdColumn, eax
|
||||
|
||||
dec eax
|
||||
mcStoreMember TCmdBuf.cmdbuf_TokenIterator, eax
|
||||
inc eax
|
||||
|
||||
mov esi, ebx
|
||||
mov edx, eax
|
||||
mcLoadMemberRef edi, TCmdBuf.cmdbuf_CmdTokens
|
||||
|
||||
.load_char:
|
||||
lodsw
|
||||
mcOnRegZero eax, .done
|
||||
|
||||
cmp al, CHAR_BLANK
|
||||
je .separator
|
||||
|
||||
mcOnRegNotZero edx, .load_char
|
||||
|
||||
lea edx, [esi - 2]
|
||||
mov [edi], edx
|
||||
add edi, 4
|
||||
inc [ebx + TCmdBuf.cmdbuf_NumTokens]
|
||||
cmp [ebx + TCmdBuf.cmdbuf_NumTokens], CMDBUF_MAX_TOKENS
|
||||
je .done
|
||||
jmp .load_char
|
||||
|
||||
.separator:
|
||||
mcZeroBits edx
|
||||
mov [esi - 2], dx
|
||||
jmp .load_char
|
||||
|
||||
.done:
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Input:
|
||||
; AL = character
|
||||
; Output:
|
||||
; CF = TRUE if AL is a digit
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TCmdBuf_IsDigit:
|
||||
cmp al, '0'
|
||||
jb .false
|
||||
|
||||
cmp al, '9'
|
||||
ja .false
|
||||
|
||||
stc
|
||||
ret
|
||||
|
||||
.false:
|
||||
clc
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Input:
|
||||
; ESI = token address
|
||||
; Output:
|
||||
; CF = TRUE if token is a real value: "-100" or "5.6"
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TCmdBuf_IsRealToken:
|
||||
mcZeroBits ecx
|
||||
mcZeroBits eax
|
||||
mcZeroBits edi
|
||||
|
||||
.load_char:
|
||||
mov ax, [esi + ecx*2]
|
||||
inc ecx
|
||||
mcOnRegZero eax, .true
|
||||
|
||||
mcOnRegEqu al, '-', .minus
|
||||
mcOnRegEqu al, '.', .period
|
||||
;
|
||||
; Check if digit
|
||||
;
|
||||
call TCmdBuf_IsDigit
|
||||
jc .load_char
|
||||
|
||||
.false:
|
||||
clc
|
||||
ret
|
||||
|
||||
.minus:
|
||||
mcOnRegEqu ecx, 1, .load_char
|
||||
jmp .false
|
||||
|
||||
.period:
|
||||
mcOnRegNotZero edi, .false
|
||||
mov edi, esi
|
||||
jmp .load_char
|
||||
|
||||
.true:
|
||||
stc
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Output:
|
||||
; ESI = token address or NULL
|
||||
; EAX = token type (CMD_TOKEN_ALPHA, CMD_TOKEN_REAL, CMD_TOKEN_EOL)
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TCmdBuf_GetNextToken:
|
||||
mov ebx, [glb_pCmdBuf]
|
||||
inc [ebx + TCmdBuf.cmdbuf_TokenIterator]
|
||||
|
||||
mcLoadMember ecx, TCmdBuf.cmdbuf_TokenIterator
|
||||
cmp ecx, [ebx + TCmdBuf.cmdbuf_NumTokens]
|
||||
jae .end_of_line
|
||||
|
||||
mov esi, [ebx + ecx*4 + TCmdBuf.cmdbuf_CmdTokens]
|
||||
call TCmdBuf_IsRealToken
|
||||
jc .real_value
|
||||
|
||||
mcLoad8bitsToReg32 eax, CMD_TOKEN_ALPHA
|
||||
ret
|
||||
|
||||
.real_value:
|
||||
mcLoad8bitsToReg32 eax, CMD_TOKEN_REAL
|
||||
ret
|
||||
|
||||
.end_of_line:
|
||||
mcZeroBits eax
|
||||
mcZeroBits esi
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Input:
|
||||
; ESI = ANSI text
|
||||
; AL = character to find
|
||||
; Output:
|
||||
; ECX = character offset (CF=TRUE)
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TCmdBuf_AnsiFindChar:
|
||||
mcZeroBits ecx
|
||||
|
||||
.test_char:
|
||||
cmp byte [esi + ecx], 0
|
||||
je .not_found
|
||||
|
||||
cmp [esi + ecx], al
|
||||
je .found
|
||||
|
||||
inc ecx
|
||||
jmp .test_char
|
||||
|
||||
.found:
|
||||
stc
|
||||
ret
|
||||
|
||||
.not_found:
|
||||
clc
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Output:
|
||||
; EBX = TCmdBuf instance
|
||||
; ESI = ANSI token scanned
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TCmdBuf_Scan:
|
||||
call TCmdBuf_GetNextToken
|
||||
mcStoreMember TCmdBuf.cmdbuf_KEY, al
|
||||
|
||||
mcZeroBits edx
|
||||
mcStoreMember TCmdBuf.cmdbuf_INUM, edx
|
||||
mcStoreMember TCmdBuf.cmdbuf_AnsiTokenBuf, dl
|
||||
|
||||
fldz
|
||||
fstp [ebx + TCmdBuf.cmdbuf_FNUM]
|
||||
|
||||
mcOnRegZero esi, .done
|
||||
;
|
||||
; Convert the token into ANSI
|
||||
;
|
||||
mcLoadMemberRef edi, TCmdBuf.cmdbuf_AnsiTokenBuf
|
||||
mov eax, edx
|
||||
|
||||
.convert_char:
|
||||
lodsw
|
||||
stosb
|
||||
mcOnRegNotZero eax, .convert_char
|
||||
|
||||
cmp [ebx + TCmdBuf.cmdbuf_KEY], CMD_TOKEN_ALPHA
|
||||
je .done
|
||||
|
||||
mcLoadMemberRef esi, TCmdBuf.cmdbuf_AnsiTokenBuf
|
||||
mov al, '.'
|
||||
call TCmdBuf_AnsiFindChar
|
||||
jc .set_fp_num
|
||||
;
|
||||
; Integer value scanned
|
||||
;
|
||||
call TCmdBuf_AnsiStr2Int32
|
||||
mcStoreMember TCmdBuf.cmdbuf_INUM, eax
|
||||
|
||||
fild [ebx + TCmdBuf.cmdbuf_INUM]
|
||||
fstp [ebx + TCmdBuf.cmdbuf_FNUM]
|
||||
jmp .done
|
||||
|
||||
.set_fp_num:
|
||||
;
|
||||
; FP value scanned
|
||||
;
|
||||
mcLoadMemberRef edi, TCmdBuf.cmdbuf_FNUM
|
||||
call TCmdBuf_AnsiStr2Double
|
||||
|
||||
.done:
|
||||
mcLoadMemberRef esi, TCmdBuf.cmdbuf_AnsiTokenBuf
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Input:
|
||||
; ESI = ANSI text
|
||||
; Output:
|
||||
; ECX = number of characters in the string
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TCmdBuf_AnsiStrLen:
|
||||
push edx
|
||||
|
||||
mcZeroBits ecx
|
||||
mcZeroBits edx
|
||||
|
||||
.check_char:
|
||||
cmp [esi + ecx], dl
|
||||
je .done
|
||||
|
||||
inc ecx
|
||||
jmp .check_char
|
||||
|
||||
.done:
|
||||
pop edx
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Input:
|
||||
; ESI = ANSI text
|
||||
; Output:
|
||||
; EAX = converted value
|
||||
; --------------------------------------------------------------------------
|
||||
virtual at 0
|
||||
loc5:
|
||||
.bNegative BOOL ?
|
||||
.size = $
|
||||
end virtual
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TCmdBuf_AnsiStr2Int32:
|
||||
mcBeginLocals loc5.size
|
||||
|
||||
mcZeroBits eax
|
||||
mcZeroBits edx
|
||||
mcStoreLocal loc5.bNegative, eax
|
||||
|
||||
cmp byte [esi], '-'
|
||||
jne .convert
|
||||
|
||||
inc [esp + loc5.bNegative]
|
||||
inc esi
|
||||
|
||||
.convert:
|
||||
mov dl, [esi]
|
||||
mcOnRegZero edx, .apply_sign
|
||||
|
||||
sub dl, '0'
|
||||
inc esi
|
||||
imul eax, 10
|
||||
add eax, edx
|
||||
jmp .convert
|
||||
|
||||
.apply_sign:
|
||||
cmp byte [esp + loc5.bNegative], 0
|
||||
je .done
|
||||
|
||||
neg eax
|
||||
|
||||
.done:
|
||||
mcEndLocals loc5.size
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Input:
|
||||
; ESI = text
|
||||
; EDI = pointer to DOUBLE value
|
||||
; --------------------------------------------------------------------------
|
||||
virtual at 0
|
||||
loc6:
|
||||
.pszDot PCHAR ?
|
||||
.pszValue PCHAR ?
|
||||
.bNegative BOOL ?
|
||||
.iPart1 INT32 ?
|
||||
.iPart2 INT32 ?
|
||||
.pDblResult PDOUBLE ?
|
||||
.dblPart1 DOUBLE ?
|
||||
.dblPart2 DOUBLE ?
|
||||
.size = $
|
||||
end virtual
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TCmdBuf_AnsiStr2Double:
|
||||
mcBeginLocals loc6.size
|
||||
mcStoreLocal loc6.pszValue, esi
|
||||
mcStoreLocal loc6.pDblResult, edi
|
||||
|
||||
mcZeroBits eax
|
||||
mcStoreLocal loc6.bNegative, eax
|
||||
mcStoreLocal loc6.pszDot, eax
|
||||
|
||||
cmp byte [esi], '-'
|
||||
jne .parse
|
||||
|
||||
inc [esp + loc6.bNegative]
|
||||
inc [esp + loc6.pszValue]
|
||||
inc esi
|
||||
|
||||
.parse:
|
||||
lodsb
|
||||
mcOnRegZero eax, .analysis
|
||||
mcOnRegEqu al, '.', .dot
|
||||
jmp .parse
|
||||
|
||||
.dot:
|
||||
lea edx, [esi - 1]
|
||||
mcStoreLocal loc6.pszDot, edx
|
||||
jmp .parse
|
||||
|
||||
.analysis:
|
||||
cmp byte [esp + loc6.pszDot], 0
|
||||
jne .combine_parts
|
||||
;
|
||||
; No decimal point
|
||||
;
|
||||
mcLoadLocal esi, loc6.pszValue
|
||||
call TCmdBuf_AnsiStr2Int32
|
||||
mcStoreLocal loc6.iPart1, eax
|
||||
|
||||
fild [esp + loc6.iPart1]
|
||||
jmp .apply_sign
|
||||
|
||||
.combine_parts:
|
||||
mcLoadLocal edi, loc6.pszDot
|
||||
mcZeroBits al
|
||||
stosb
|
||||
|
||||
fldz
|
||||
fldz
|
||||
fstp [esp + loc6.dblPart1]
|
||||
fstp [esp + loc6.dblPart2]
|
||||
|
||||
mov esi, edi
|
||||
call TCmdBuf_AnsiStr2Int32
|
||||
mcStoreLocal loc6.iPart2, eax
|
||||
|
||||
mcLoadLocal esi, loc6.pszValue
|
||||
call TCmdBuf_AnsiStr2Int32
|
||||
mcStoreLocal loc6.iPart1, eax
|
||||
|
||||
mcLoadLocal esi, loc6.pszDot
|
||||
inc esi
|
||||
call TCmdBuf_AnsiStrLen
|
||||
jecxz .combine
|
||||
|
||||
fild [esp + loc6.iPart2]
|
||||
@@:
|
||||
fld [glb_dbl_Ten]
|
||||
fdivp
|
||||
loop @r
|
||||
|
||||
fstp [esp + loc6.dblPart2]
|
||||
|
||||
.combine:
|
||||
fild [esp + loc6.iPart1]
|
||||
fld [esp + loc6.dblPart2]
|
||||
faddp
|
||||
|
||||
.apply_sign:
|
||||
cmp byte [esp + loc6.bNegative], 0
|
||||
je .done
|
||||
|
||||
fchs
|
||||
|
||||
.done:
|
||||
mcLoadLocal edi, loc6.pDblResult
|
||||
fstp tbyte [edi]
|
||||
|
||||
mcEndLocals loc6.size
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Output:
|
||||
; CF = TRUE if buffer has no characters
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TCmdBuf_IsEmpty:
|
||||
mov ebx, [glb_pCmdBuf]
|
||||
cmp [ebx + TCmdBuf.cmdbuf_CmdColumn], 0
|
||||
sete cl
|
||||
shr cl, 1
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TCmdBuf_Backspace:
|
||||
mov ebx, [glb_pCmdBuf]
|
||||
cmp [ebx + TCmdBuf.cmdbuf_CmdColumn], 0
|
||||
je .done
|
||||
|
||||
dec [ebx + TCmdBuf.cmdbuf_CmdColumn]
|
||||
|
||||
.done:
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TCmdBuf_Create:
|
||||
invoke HeapAlloc, [glb_Allocator], HEAP_NO_SERIALIZE, TCmdBuf.size
|
||||
mov [glb_pCmdBuf], eax
|
||||
|
||||
mov edi, eax
|
||||
mcZeroBits eax
|
||||
mov ecx, TCmdBuf.size
|
||||
rep stosb
|
||||
ret
|
||||
|
||||
; --- EOF ---
|
@ -1,37 +0,0 @@
|
||||
; --------------------------------------------------------------------------
|
||||
; FILE: TCmdBuf.Inc
|
||||
; DATE: September 27, 2008
|
||||
; --------------------------------------------------------------------------
|
||||
|
||||
CMDBUF_ROOM_CHARS = 64
|
||||
CMDBUF_MAX_CHARS = (CMDBUF_ROOM_CHARS - 1)
|
||||
CMDBUF_MAX_TOKENS = 16
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
CMD_TOKEN_EOL = 0
|
||||
CMD_TOKEN_REAL = 1
|
||||
CMD_TOKEN_ALPHA = 2
|
||||
CMD_TOKEN_ERROR = 3
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
virtual at 0
|
||||
TCmdBuf:
|
||||
.cmdbuf_FullBuffer WCHARS CMDBUF_ROOM_CHARS
|
||||
.cmdbuf_CmdColumn INDEX ?
|
||||
.cmdbuf_CmdTokens STRINGS CMDBUF_MAX_TOKENS
|
||||
.cmdbuf_NumTokens COUNT ?
|
||||
.cmdbuf_TokenIterator INDEX ?
|
||||
.cmdbuf_AnsiTokenBuf CHARS CMDBUF_ROOM_CHARS
|
||||
;
|
||||
; If scanned token is of type CMD_TOKEN_REAL
|
||||
; then following section is filled, otherwise
|
||||
; all following members are set to zero
|
||||
;
|
||||
.cmdbuf_INUM INT32 ?
|
||||
.cmdbuf_FNUM DOUBLE ?
|
||||
.cmdbuf_KEY BYTE ?
|
||||
.cmdbuf_Reserved BYTE ?
|
||||
.size = $
|
||||
end virtual
|
||||
|
||||
; --- EOF ---
|
File diff suppressed because it is too large
Load Diff
@ -1,185 +0,0 @@
|
||||
; --------------------------------------------------------------------------
|
||||
; FILE: TCommon.Inc
|
||||
; DATE: October 4, 2008
|
||||
; --------------------------------------------------------------------------
|
||||
|
||||
DEV_SR_SENSORS = 1
|
||||
DEV_LR_SENSORS = 2
|
||||
DEV_PHASERS = 3
|
||||
DEV_PHOTON_TUBES = 4
|
||||
DEV_LIFE_SUPPORT = 5
|
||||
DEV_WARP_ENGINES = 6
|
||||
DEV_IMPULSE_ENGINES = 7
|
||||
DEV_SHIELDS = 8
|
||||
DEV_SUBSPACE_RADIO = 9
|
||||
DEV_SHUTTLE_CRAFT = 10
|
||||
DEV_COMPUTER = 11
|
||||
DEV_TRANSPORTER = 12
|
||||
DEV_SHIELD_CONTROL = 13
|
||||
DEV_DEATHRAY = 14
|
||||
|
||||
CONDITION_GREEN = 1
|
||||
CONDITION_RED = 2
|
||||
CONDITION_YELLOW = 3
|
||||
CONDITION_DOCKED = 4
|
||||
|
||||
virtual at 0
|
||||
TPlanet:
|
||||
.planet_X BYTE ?
|
||||
.planet_Y BYTE ?
|
||||
.planet_CLASS BYTE ?
|
||||
.planet_DILITHIUM BYTE ?
|
||||
.planet_SCANNED BYTE ?
|
||||
.size = $
|
||||
end virtual
|
||||
|
||||
virtual at 0
|
||||
TREKDATA:
|
||||
.CRYPROB DOUBLE ?
|
||||
.DATE DOUBLE ?
|
||||
.REMRES DOUBLE ?
|
||||
.REMTIME DOUBLE ?
|
||||
.KPOWER DOUBLES 20
|
||||
.KDIST DOUBLES 20
|
||||
.DAMAGE DOUBLES 14
|
||||
.INRESOR DOUBLE ?
|
||||
.INTIME DOUBLE ?
|
||||
.INENRG DOUBLE ?
|
||||
.INSHLD DOUBLE ?
|
||||
.INLSR DOUBLE ?
|
||||
.INDATE DOUBLE ?
|
||||
.ENERGY DOUBLE ?
|
||||
.SHLD DOUBLE ?
|
||||
.WARPFAC DOUBLE ?
|
||||
.WFACSQ DOUBLE ?
|
||||
.LSUPRES DOUBLE ?
|
||||
.DIST DOUBLE ?
|
||||
.DIREC DOUBLE ?
|
||||
.TIME DOUBLE ?
|
||||
.DOCKDATE DOUBLE ?
|
||||
.DAMFAC DOUBLE ?
|
||||
.FUTURE1 DOUBLE ?
|
||||
.FUTURE2 DOUBLE ?
|
||||
.FUTURE3 DOUBLE ?
|
||||
.FUTURE4 DOUBLE ?
|
||||
.FUTURE5 DOUBLE ?
|
||||
.FUTURE6 DOUBLE ?
|
||||
.FUTURE7 DOUBLE ?
|
||||
.HEIGHT DOUBLE ?
|
||||
;
|
||||
; Integer variables
|
||||
;
|
||||
align 4
|
||||
.GALAXY INTEGERS 64
|
||||
.STARCH INTEGERS 64
|
||||
.INSTAR INT32 ?
|
||||
.REMKL BYTE ?
|
||||
.REMCOM BYTE ?
|
||||
.REMBASE BYTE ?
|
||||
.STARKL BYTE ?
|
||||
.BASEKL BYTE ?
|
||||
.KILLK BYTE ?
|
||||
.KILLC BYTE ?
|
||||
.CX BYTES 10
|
||||
.CY BYTES 10
|
||||
.BASEQX BYTES 5
|
||||
.BASEQY BYTES 5
|
||||
.NEWSTUF BYTES 64
|
||||
.SCANNED BYTES 64
|
||||
.PLNETS BYTES (10 * TPlanet.size)
|
||||
.ISX BYTE ?
|
||||
.ISY BYTE ?
|
||||
.KSTUF4 BYTE ?
|
||||
.KSTUF5 BYTE ?
|
||||
.NSCREM BYTE ?
|
||||
.NROMKL BYTE ?
|
||||
.NROMREM BYTE ?
|
||||
.NSCKILL BYTE ?
|
||||
.ICRYSTL BYTE ?
|
||||
.NPLANKL BYTE ?
|
||||
.QUAD BYTES 100
|
||||
.KX BYTES 20
|
||||
.KY BYTES 20
|
||||
.INKLING BYTE ?
|
||||
.INBASE BYTE ?
|
||||
.INCOM BYTE ?
|
||||
.INTORPS BYTE ?
|
||||
.SHLDUP BYTE ?
|
||||
.CONDIT BYTE ?
|
||||
.TORPS BYTE ?
|
||||
.SHIP BYTE ?
|
||||
.QUADX BYTE ?
|
||||
.QUADY BYTE ?
|
||||
.SECTX BYTE ?
|
||||
.SECTY BYTE ?
|
||||
.ITHX BYTE ?
|
||||
.ITHY BYTE ?
|
||||
.ITHERE BYTE ?
|
||||
.LENGTH BYTE ?
|
||||
.SKILL BYTE ?
|
||||
.QTORPS BYTE ?
|
||||
.NPTUBES BYTE ?
|
||||
.PASSWD CHARS 12
|
||||
.BASEX BYTE ?
|
||||
.BASEY BYTE ?
|
||||
.KLHERE BYTE ?
|
||||
.COMHERE BYTE ?
|
||||
.CASUAL BYTE ?
|
||||
.NHELP BYTE ?
|
||||
.NKINKS BYTE ?
|
||||
.IDIDIT BYTE ?
|
||||
.KDIDIT BYTE ?
|
||||
.KSHOT BYTE ?
|
||||
.GAMEWON BYTE ?
|
||||
.ALIVE BYTE ?
|
||||
.JUSTIN BYTE ?
|
||||
.RESTING BYTE ?
|
||||
.ALLDONE BYTE ?
|
||||
.SHLDCHG BYTE ?
|
||||
.THINGX BYTE ?
|
||||
.THINGY BYTE ?
|
||||
.PLNETX BYTE ?
|
||||
.PLNETY BYTE ?
|
||||
.INORBIT BYTE ?
|
||||
.LANDED BYTE ?
|
||||
.IPLANET BYTE ?
|
||||
.IMINE BYTE ?
|
||||
.INPLAN BYTE ?
|
||||
.NENHERE BYTE ?
|
||||
.ISHERE BYTE ?
|
||||
.NEUTZ BYTE ?
|
||||
.IRHERE BYTE ?
|
||||
.ICRAFT BYTE ?
|
||||
.IENTESC BYTE ?
|
||||
.ISCRAFT BYTE ?
|
||||
.ISATB BYTE ?
|
||||
.ISCATE BYTE ?
|
||||
.IPHWHO BYTE ?
|
||||
.BATX BYTE ?
|
||||
.BATY BYTE ?
|
||||
.ICSOS BYTE ?
|
||||
.ISSOS BYTE ?
|
||||
.ISUBDAM BYTE ?
|
||||
.SHUTUP BYTE ?
|
||||
.size = $
|
||||
end virtual
|
||||
|
||||
virtual at 0
|
||||
TCommon:
|
||||
.SNAP BYTE ?
|
||||
.SNAPSHT BYTES TREKDATA.size
|
||||
|
||||
align 16
|
||||
.GAMEDB BYTES TREKDATA.size
|
||||
.size = $
|
||||
end virtual
|
||||
|
||||
macro mcLoadGameDataPtr r32
|
||||
{
|
||||
mov r32, [glb_pGameData]
|
||||
}
|
||||
|
||||
PTCommon equ dd
|
||||
PTGameData equ dd
|
||||
|
||||
; --- EOF ---
|
@ -1,839 +0,0 @@
|
||||
; --------------------------------------------------------------------------
|
||||
; FILE: TConsole.Asm
|
||||
; DATE: September 21, 2008
|
||||
; --------------------------------------------------------------------------
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; CRAM3AS
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TConsole_Cram3Asterisks:
|
||||
mcLoad8bitsToReg32 ecx, 181
|
||||
call TConsole_Cram
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; CRAMSHP
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TConsole_CramShip:
|
||||
mcLoadGameDataPtr ebx
|
||||
mcLoadMember al, TREKDATA.SHIP
|
||||
|
||||
mcOnRegEqu al, CHAR_ENTERPRISE, .good_ship
|
||||
mcOnRegEqu al, CHAR_FQUEENE, .crappy_ship
|
||||
ret
|
||||
|
||||
.good_ship:
|
||||
push 144
|
||||
jmp .dump
|
||||
|
||||
.crappy_ship:
|
||||
push 145
|
||||
|
||||
.dump:
|
||||
pop ecx
|
||||
call TConsole_Cram
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TConsole_ScrollUp:
|
||||
pushad
|
||||
|
||||
mov ebx, [glb_pConsole]
|
||||
mov edi, ebx
|
||||
lea esi, [edi + TLine.size]
|
||||
mov ecx, TConsole.cons_LastRow
|
||||
rep movsb
|
||||
|
||||
lea edi, [ebx + TConsole.cons_LastRow]
|
||||
mcZeroBits eax
|
||||
mov ecx, TLine.size
|
||||
rep stosb
|
||||
|
||||
mcStoreMember TConsole.cons_CaretColumn, eax
|
||||
|
||||
mov esi, eax
|
||||
call TApp_RefreshMainWndRect
|
||||
|
||||
mov al, 0Dh
|
||||
call TLog_DumpChar
|
||||
mov al, 0Ah
|
||||
call TLog_DumpChar
|
||||
|
||||
popad
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TConsole_RefreshCaretLine:
|
||||
mcBeginLocals RECT.size
|
||||
|
||||
mov esi, esp
|
||||
invoke GetClientRect, [glb_MainWnd], esi
|
||||
|
||||
mov eax, [esi + RECT.rc_Bottom]
|
||||
sub eax, dword [glb_CharSize + SIZE.size_Height]
|
||||
dec eax
|
||||
mov [esi + RECT.rc_Top], eax
|
||||
|
||||
call TApp_RefreshMainWndRect
|
||||
|
||||
mcEndLocals RECT.size
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TConsole_Backspace:
|
||||
mov ebx, [glb_pConsole]
|
||||
cmp [ebx + TConsole.cons_CaretColumn], 0
|
||||
je .done
|
||||
|
||||
dec [ebx + TConsole.cons_CaretColumn]
|
||||
mcZeroBits eax
|
||||
call TConsole_PutChar
|
||||
|
||||
dec [ebx + TConsole.cons_CaretColumn]
|
||||
call TConsole_RefreshCaretLine
|
||||
|
||||
.done:
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Input:
|
||||
; AL = character code
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TConsole_PutChar:
|
||||
mov ebx, [glb_pConsole]
|
||||
cmp [ebx + TConsole.cons_CaretColumn], CONSOLE_LAST_COL
|
||||
jae .done
|
||||
|
||||
mcLoadMember ecx, TConsole.cons_CaretColumn
|
||||
inc [ebx + TConsole.cons_CaretColumn]
|
||||
imul ecx, TCharacter.size
|
||||
lea edi, [ebx + ecx + TConsole.cons_LastRow]
|
||||
|
||||
mcLoadMember edx, TConsole.cons_ActiveColor
|
||||
mov [edi + TCharacter.char_Symbol], al
|
||||
mov [edi + TCharacter.char_Attribute], dl
|
||||
|
||||
pushad
|
||||
call TLog_DumpChar
|
||||
popad
|
||||
|
||||
.done:
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Input:
|
||||
; CL = index of color
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TConsole_SetAttr:
|
||||
cmp cl, CONSOLE_ATTRS
|
||||
jae .done
|
||||
|
||||
and ecx, 0FFh
|
||||
push ebx
|
||||
mov ebx, [glb_pConsole]
|
||||
mcStoreMember TConsole.cons_ActiveColor, ecx
|
||||
pop ebx
|
||||
|
||||
.done:
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TConsole_SetGameMsgAttr:
|
||||
mov cl, ATTR_GAME_MSG
|
||||
call TConsole_SetAttr
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TConsole_SetCrewMsgAttr:
|
||||
mov cl, ATTR_CREW_MSG
|
||||
call TConsole_SetAttr
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Input:
|
||||
; AL = character code
|
||||
; CL = number of characters
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TConsole_RepeatChar:
|
||||
and ecx, 0FFh
|
||||
|
||||
.next:
|
||||
push ecx
|
||||
call TConsole_PutChar
|
||||
pop ecx
|
||||
loop .next
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Input:
|
||||
; CL = number of characters
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TConsole_RepeatBlank:
|
||||
mov al, CHAR_BLANK
|
||||
call TConsole_RepeatChar
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Input:
|
||||
; CL = number of characters
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TConsole_RepeatAsterisk:
|
||||
mov al, CHAR_ASTERISK
|
||||
call TConsole_RepeatChar
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; SUBROUTINE CRAM from original FORTRAN source
|
||||
; --------------------------------------------------------------------------
|
||||
; Input:
|
||||
; ECX = index of the message table
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TConsole_Cram:
|
||||
call TMsgTable_GetItem
|
||||
mcZeroBits eax
|
||||
|
||||
.get_char:
|
||||
lodsb
|
||||
mcOnRegZero eax, .done
|
||||
|
||||
call TConsole_PutChar
|
||||
jmp .get_char
|
||||
|
||||
.done:
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Input:
|
||||
; ESI = UNICODE text
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TConsole_CramWide:
|
||||
mcZeroBits eax
|
||||
|
||||
.get_char:
|
||||
lodsw
|
||||
mcOnRegZero eax, .done
|
||||
|
||||
call TConsole_PutChar
|
||||
jmp .get_char
|
||||
|
||||
.done:
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Input:
|
||||
; ESI = ANSI text
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TConsole_CramAnsi:
|
||||
mcZeroBits eax
|
||||
|
||||
.get_char:
|
||||
lodsb
|
||||
mcOnRegZero eax, .done
|
||||
|
||||
call TConsole_PutChar
|
||||
jmp .get_char
|
||||
|
||||
.done:
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Input:
|
||||
; ECX = index of the message table
|
||||
; DL = field width
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TConsole_CramString:
|
||||
movzx edx, dl
|
||||
call TMsgTable_GetLength
|
||||
|
||||
cmp eax, edx
|
||||
jae .cram_and_exit
|
||||
|
||||
sub edx, eax
|
||||
push edx
|
||||
call TConsole_Cram
|
||||
|
||||
pop ecx
|
||||
call TConsole_RepeatBlank
|
||||
ret
|
||||
|
||||
.cram_and_exit:
|
||||
call TConsole_Cram
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Input:
|
||||
; CL = 1-based device index (like DEV_IMPULSE_ENGINES)
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TConsole_CramDevice:
|
||||
movzx ecx, cl
|
||||
add ecx, 59
|
||||
call TConsole_Cram
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; CRAMEN
|
||||
; --------------------------------------------------------------------------
|
||||
; Input:
|
||||
; AL = object symbol
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TConsole_CramEnemy:
|
||||
pushad
|
||||
|
||||
mov edi, glb_ObjectMap
|
||||
mcLoad8bitsToReg32 ecx, 9
|
||||
mov edx, edi
|
||||
repne scasb
|
||||
jne .done
|
||||
|
||||
.cram_it:
|
||||
sub edi, edx
|
||||
lea ecx, [edi + 202]
|
||||
call TConsole_Cram
|
||||
|
||||
.done:
|
||||
popad
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; CRMSENA
|
||||
; --------------------------------------------------------------------------
|
||||
; Input:
|
||||
; AL = X coordinate
|
||||
; DL = Y coordinate
|
||||
; CL = 1 for "QUADRANT", 2 for "SECTOR", 0 for none
|
||||
; BL = Enemy character
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TConsole_CramEnemyAt:
|
||||
push eax ecx edx
|
||||
|
||||
mov al, bl
|
||||
call TConsole_CramEnemy
|
||||
|
||||
mov ecx, 257
|
||||
call TConsole_Cram
|
||||
|
||||
pop edx ecx eax
|
||||
call TConsole_CramLoc
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Input:
|
||||
; AL = sector X coordinate
|
||||
; DL = sector Y coordinate
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TConsole_CramEnemyAtEx:
|
||||
push ebx
|
||||
call TArray_QuadPtr
|
||||
mov bl, [ebx]
|
||||
mov cl, 2
|
||||
call TConsole_CramEnemyAt
|
||||
pop ebx
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Input:
|
||||
; EAX = Int32 value to print
|
||||
; CL = field width or zero (value is padded with blanks on the left side)
|
||||
; --------------------------------------------------------------------------
|
||||
virtual at 0
|
||||
loc19:
|
||||
.bufInt32 CHARS 12
|
||||
.nWidth COUNT ?
|
||||
.size = $
|
||||
end virtual
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TConsole_CramIntWidth:
|
||||
mcBeginLocals loc19.size
|
||||
|
||||
movzx ecx, cl
|
||||
mcStoreLocal loc19.nWidth, ecx
|
||||
|
||||
mcLoadLocalRef edi, loc19.bufInt32
|
||||
call TFormat_Int32
|
||||
|
||||
cmp [esp + loc19.nWidth], 0
|
||||
je .dump
|
||||
|
||||
cmp [esp + loc19.nWidth], ecx
|
||||
jbe .dump
|
||||
|
||||
sub ecx, [esp + loc19.nWidth]
|
||||
neg ecx
|
||||
call TConsole_RepeatBlank
|
||||
|
||||
.dump:
|
||||
mcLoadLocalRef esi, loc19.bufInt32
|
||||
mcZeroBits eax
|
||||
|
||||
.next:
|
||||
lodsb
|
||||
mcOnRegZero eax, .done
|
||||
call TConsole_PutChar
|
||||
jmp .next
|
||||
|
||||
.done:
|
||||
mcEndLocals loc19.size
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Input:
|
||||
; EAX = Int32 value to print
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TConsole_CramInt:
|
||||
pushad
|
||||
mcZeroBits ecx
|
||||
call TConsole_CramIntWidth
|
||||
popad
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Input:
|
||||
; ECX = message table index
|
||||
; EAX = Int32 value to print
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TConsole_CramSinglePlural:
|
||||
push eax ecx
|
||||
call TConsole_CramInt
|
||||
|
||||
mov al, CHAR_BLANK
|
||||
call TConsole_PutChar
|
||||
|
||||
pop ecx
|
||||
call TConsole_Cram
|
||||
|
||||
pop eax
|
||||
cmp al, 1
|
||||
je .done
|
||||
|
||||
mov al, 'S'
|
||||
call TConsole_PutChar
|
||||
|
||||
.done:
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Input:
|
||||
; AL = X coordinate
|
||||
; DL = Y coordinate
|
||||
; CL = KEY (1 - print "QUADRANT", 2 - print "SECTOR")
|
||||
; --------------------------------------------------------------------------
|
||||
virtual at 0
|
||||
loc21:
|
||||
.nIX INT32 ?
|
||||
.nIY INT32 ?
|
||||
.size = $
|
||||
end virtual
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TConsole_CramLoc:
|
||||
mcBeginLocals loc21.size
|
||||
|
||||
movzx eax, al
|
||||
movzx edx, dl
|
||||
mcStoreLocal loc21.nIX, eax
|
||||
mcStoreLocal loc21.nIY, edx
|
||||
|
||||
mcOnRegZero cl, .print_values
|
||||
|
||||
add cl, 56
|
||||
movzx ecx, cl
|
||||
call TConsole_Cram
|
||||
|
||||
.print_values:
|
||||
mov al, CHAR_BLANK
|
||||
call TConsole_PutChar
|
||||
|
||||
mcLoadLocal eax, loc21.nIX
|
||||
call TConsole_CramInt
|
||||
|
||||
mcLoad8bitsToReg32 ecx, 59
|
||||
call TConsole_Cram
|
||||
|
||||
mcLoadLocal eax, loc21.nIY
|
||||
call TConsole_CramInt
|
||||
|
||||
mcEndLocals loc21.size
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Input:
|
||||
; ST(0) = value to print
|
||||
; CL = precision
|
||||
; DL = field width or zero
|
||||
; --------------------------------------------------------------------------
|
||||
virtual at 0
|
||||
loc20:
|
||||
.bufDouble CHARS 16
|
||||
.nWidth COUNT ?
|
||||
.size = $
|
||||
end virtual
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TConsole_CramFloatWidth:
|
||||
mcBeginLocals loc20.size
|
||||
|
||||
movzx edx, dl
|
||||
mcStoreLocal loc20.nWidth, edx
|
||||
|
||||
mcLoadLocalRef edi, loc20.bufDouble
|
||||
call TFormat_Double
|
||||
|
||||
cmp [esp + loc20.nWidth], 0
|
||||
je .dump
|
||||
|
||||
cmp [esp + loc20.nWidth], ecx
|
||||
jbe .dump
|
||||
|
||||
sub ecx, [esp + loc20.nWidth]
|
||||
neg ecx
|
||||
call TConsole_RepeatBlank
|
||||
|
||||
.dump:
|
||||
mcLoadLocalRef esi, loc20.bufDouble
|
||||
mcZeroBits eax
|
||||
|
||||
.next:
|
||||
lodsb
|
||||
mcOnRegZero eax, .done
|
||||
call TConsole_PutChar
|
||||
jmp .next
|
||||
|
||||
.done:
|
||||
mcEndLocals loc20.size
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Input:
|
||||
; ST(0) = value to print
|
||||
; CL = precision
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TConsole_CramFloat:
|
||||
pushad
|
||||
mcZeroBits edx
|
||||
call TConsole_CramFloatWidth
|
||||
popad
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; SUBROUTINE PROUT from original FORTRAN source
|
||||
; --------------------------------------------------------------------------
|
||||
; Input:
|
||||
; ECX = index of the message table
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TConsole_Prout:
|
||||
push ecx
|
||||
call TConsole_Cram
|
||||
call TConsole_ScrollUp
|
||||
pop ecx
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Input:
|
||||
; CL = number of lines to skip
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TConsole_Skip:
|
||||
movzx ecx, cl
|
||||
|
||||
.skipping:
|
||||
push ecx
|
||||
call TConsole_ScrollUp
|
||||
pop ecx
|
||||
loop .skipping
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Input:
|
||||
; ECX = index of the message table
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TConsole_ProutGameMsg:
|
||||
push ecx
|
||||
call TConsole_SetGameMsgAttr
|
||||
pop ecx
|
||||
call TConsole_Prout
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Input:
|
||||
; CL = index of color
|
||||
; Output:
|
||||
; EAX = COLORREF at the specified index
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TConsole_GetColorAtIndex:
|
||||
mcLoadRGB eax, 255, 0, 0
|
||||
cmp cl, CONSOLE_ATTRS
|
||||
jae .done
|
||||
|
||||
and ecx, 0FFh
|
||||
mov ebx, [glb_pConsole]
|
||||
mov eax, [ebx + 4*ecx + TConsole.cons_Attributes]
|
||||
|
||||
.done:
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Input:
|
||||
; EDX = HDC
|
||||
; EAX = Y coordinate
|
||||
; ESI = address of TLine structure
|
||||
; ECX = number of lines left in the loop
|
||||
; --------------------------------------------------------------------------
|
||||
virtual at 0
|
||||
loc2:
|
||||
.hDC HDC ?
|
||||
.yText INT32 ?
|
||||
.xText INT32 ?
|
||||
.pTChar PTCharacter ?
|
||||
.rgbNow COLORREF ?
|
||||
.strOneChar WCHARS 2
|
||||
.nLinesLeft COUNT ?
|
||||
.rect_Caret rb RECT.size
|
||||
.size = $
|
||||
end virtual
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TConsole_DrawLine:
|
||||
mcBeginLocals loc2.size
|
||||
|
||||
mcStoreLocal loc2.nLinesLeft, ecx
|
||||
mcStoreLocal loc2.hDC, edx
|
||||
mcStoreLocal loc2.yText, eax
|
||||
mcStoreLocal loc2.pTChar, esi
|
||||
|
||||
mcZeroBits eax
|
||||
mcStoreLocal loc2.rgbNow, eax
|
||||
inc eax
|
||||
mcStoreLocal loc2.xText, eax
|
||||
|
||||
.load_char:
|
||||
mcLoadLocal esi, loc2.pTChar
|
||||
cmp [esi + TCharacter.char_Symbol], 0
|
||||
je .draw_caret
|
||||
|
||||
movzx eax, [esi + TCharacter.char_Symbol]
|
||||
mov [esp + loc2.strOneChar], ax
|
||||
|
||||
mov cl, [esi + TCharacter.char_Attribute]
|
||||
call TConsole_GetColorAtIndex
|
||||
|
||||
mcLoadLocal edi, loc2.hDC
|
||||
cmp [esp + loc2.rgbNow], eax
|
||||
je .draw_char
|
||||
|
||||
mcStoreLocal loc2.rgbNow, eax
|
||||
invoke SetTextColor, edi, eax
|
||||
|
||||
.draw_char:
|
||||
mov ebx, esp
|
||||
lea esi, [ebx + loc2.strOneChar]
|
||||
|
||||
invoke TextOut, edi, \
|
||||
[ebx + loc2.xText], \
|
||||
[ebx + loc2.yText], esi, 1
|
||||
|
||||
add [ebx + loc2.pTChar], TCharacter.size
|
||||
|
||||
mov eax, dword [glb_CharSize + SIZE.size_Width]
|
||||
add [ebx + loc2.xText], eax
|
||||
jmp .load_char
|
||||
|
||||
.draw_caret:
|
||||
cmp [esp + loc2.nLinesLeft], 1
|
||||
jne .done
|
||||
;
|
||||
; Paint a rectangular caret
|
||||
;
|
||||
mov ebx, esp
|
||||
mcLoadMemberRef edi, loc2.rect_Caret
|
||||
mcLoadMember edx, loc2.xText
|
||||
mcLoadMember eax, loc2.yText
|
||||
mov [edi + RECT.rc_Left], edx
|
||||
mov [edi + RECT.rc_Top], eax
|
||||
|
||||
mov esi, glb_CharSize
|
||||
add edx, [esi + SIZE.size_Width]
|
||||
add eax, [esi + SIZE.size_Height]
|
||||
mov [edi + RECT.rc_Right], edx
|
||||
mov [edi + RECT.rc_Bottom], eax
|
||||
|
||||
mov cl, ATTR_PROMPT_VALUE
|
||||
call TConsole_GetColorAtIndex
|
||||
|
||||
invoke CreateSolidBrush, eax
|
||||
mov esi, eax
|
||||
mcLoadLocal edx, loc2.hDC
|
||||
mcLoadLocalRef edi, loc2.rect_Caret
|
||||
inc [edi + RECT.rc_Left]
|
||||
inc [edi + RECT.rc_Right]
|
||||
invoke FillRect, edx, edi, eax
|
||||
invoke DeleteObject, esi
|
||||
|
||||
.done:
|
||||
mcEndLocals loc2.size
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Input:
|
||||
; EDX = HDC
|
||||
; --------------------------------------------------------------------------
|
||||
virtual at 0
|
||||
loc3:
|
||||
.hDC HDC ?
|
||||
.yText INT32 ?
|
||||
.pLineOfChars PTLine ?
|
||||
.nLines COUNT ?
|
||||
.size = $
|
||||
end virtual
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TConsole_DrawAllLines:
|
||||
mcBeginLocals loc3.size
|
||||
|
||||
mcStoreLocal loc3.hDC, edx
|
||||
|
||||
mcLoad1 eax
|
||||
mcStoreLocal loc3.yText, eax
|
||||
|
||||
mov ebx, [glb_pConsole]
|
||||
mcStoreLocal loc3.pLineOfChars, ebx
|
||||
|
||||
mcLoad8bitsToReg32 ecx, CONSOLE_ROWS
|
||||
mcStoreLocal loc3.nLines, ecx
|
||||
|
||||
.paint_row:
|
||||
mcLoadLocal edx, loc3.hDC
|
||||
mcLoadLocal eax, loc3.yText
|
||||
mcLoadLocal esi, loc3.pLineOfChars
|
||||
mcLoadLocal ecx, loc3.nLines
|
||||
call TConsole_DrawLine
|
||||
|
||||
add [esp + loc3.pLineOfChars], TLine.size
|
||||
|
||||
mov eax, dword [glb_CharSize + SIZE.size_Height]
|
||||
add [esp + loc3.yText], eax
|
||||
|
||||
dec [esp + loc3.nLines]
|
||||
jnz .paint_row
|
||||
|
||||
mcEndLocals loc3.size
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TConsole_Create:
|
||||
invoke HeapAlloc, [glb_Allocator], HEAP_NO_SERIALIZE, TConsole.size
|
||||
mov [glb_pConsole], eax
|
||||
|
||||
mov edi, eax
|
||||
mov ecx, TConsole.size
|
||||
mcZeroBits eax
|
||||
push edi
|
||||
rep stosb
|
||||
pop esi
|
||||
;
|
||||
; Init palette
|
||||
;
|
||||
lea edi, [esi + TConsole.cons_Attributes]
|
||||
|
||||
mcLoadRGB eax, 128, 191, 255
|
||||
stosd ; ATTR_GAME_MSG
|
||||
|
||||
mcLoadRGB eax, 255, 255, 206
|
||||
stosd ; ATTR_CREW_MSG
|
||||
|
||||
mcLoadRGB eax, 94, 174, 174
|
||||
stosd ; ATTR_KLINGON
|
||||
|
||||
mcLoadRGB eax, 0, 176, 0
|
||||
stosd ; ATTR_ROMULAN
|
||||
|
||||
mcLoadRGB eax, 192, 192, 192
|
||||
stosd ; ATTR_COSMOS
|
||||
|
||||
mcLoadRGB eax, 255, 255, 255
|
||||
stosd ; ATTR_SHIP
|
||||
|
||||
mcLoadRGB eax, 255, 255, 0
|
||||
stosd ; ATTR_STAR
|
||||
|
||||
mcLoadRGB eax, 6, 131, 255
|
||||
stosd ; ATTR_BASE
|
||||
|
||||
mcLoadRGB eax, 128, 128, 64
|
||||
stosd ; ATTR_THOLIAN
|
||||
|
||||
mcLoadRGB eax, 128, 128, 128
|
||||
stosd ; ATTR_BLACK_HOLE
|
||||
|
||||
mcLoadRGB eax, 230, 211, 157
|
||||
stosd ; ATTR_PLANET
|
||||
|
||||
mcLoadRGB eax, 0, 128, 255
|
||||
stosd ; ATTR_REPORT_TEXT
|
||||
|
||||
mcLoadRGB eax, 62, 158, 255
|
||||
stosd ; ATTR_REPORT_VALUE
|
||||
|
||||
mcLoadRGB eax, 248, 108, 41
|
||||
stosd ; ATTR_GALAXY_EDGE
|
||||
|
||||
mcLoadRGB eax, 149, 255, 202
|
||||
stosd ; ATTR_SHIP_QUAD
|
||||
|
||||
mcLoadRGB eax, 174, 194, 247
|
||||
stosd ; ATTR_SCANNED_QUAD
|
||||
|
||||
mcLoadRGB eax, 218, 191, 5
|
||||
stosd ; ATTR_SCAN_SCALE
|
||||
|
||||
mcLoadRGB eax, 255, 170, 170
|
||||
stosd ; ATTR_HIT_DAMAGE
|
||||
|
||||
mcLoadRGB eax, 181, 181, 106
|
||||
stosd ; ATTR_WEB
|
||||
|
||||
mcLoadRGB eax, 46, 170, 43
|
||||
stosd ; ATTR_COND_GREEN
|
||||
|
||||
mcLoadRGB eax, 255, 255, 130
|
||||
stosd ; ATTR_COND_YELLOW
|
||||
|
||||
mcLoadRGB eax, 255, 73, 64
|
||||
stosd ; ATTR_COND_RED
|
||||
|
||||
mcLoadRGB eax, 0, 155, 0
|
||||
stosd ; ATTR_PROMPT_TEXT
|
||||
|
||||
mcLoadRGB eax, 73, 231, 69
|
||||
stosd ; ATTR_PROMPT_VALUE
|
||||
|
||||
ret
|
||||
|
||||
; --- EOF ---
|
@ -1,63 +0,0 @@
|
||||
; --------------------------------------------------------------------------
|
||||
; FILE: TConsole.Inc
|
||||
; DATE: September 21, 2008
|
||||
; --------------------------------------------------------------------------
|
||||
|
||||
CONSOLE_ROWS = 40
|
||||
CONSOLE_COLS = 80
|
||||
CONSOLE_ATTRS = 24
|
||||
CONSOLE_LAST_COL = (CONSOLE_COLS - 1)
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
ATTR_GAME_MSG = 0
|
||||
ATTR_CREW_MSG = 1
|
||||
ATTR_KLINGON = 2
|
||||
ATTR_ROMULAN = 3
|
||||
ATTR_COSMOS = 4
|
||||
ATTR_SHIP = 5
|
||||
ATTR_STAR = 6
|
||||
ATTR_BASE = 7
|
||||
ATTR_THOLIAN = 8
|
||||
ATTR_BLACK_HOLE = 9
|
||||
ATTR_PLANET = 10
|
||||
ATTR_REPORT_TEXT = 11
|
||||
ATTR_REPORT_VALUE = 12
|
||||
ATTR_GALAXY_EDGE = 13
|
||||
ATTR_SHIP_QUAD = 14
|
||||
ATTR_SCANNED_QUAD = 15
|
||||
ATTR_SCAN_SCALE = 16
|
||||
ATTR_HIT_DAMAGE = 17
|
||||
ATTR_WEB = 18
|
||||
ATTR_COND_GREEN = 19
|
||||
ATTR_COND_YELLOW = 20
|
||||
ATTR_COND_RED = 21
|
||||
ATTR_PROMPT_TEXT = 22
|
||||
ATTR_PROMPT_VALUE = 23
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
virtual at 0
|
||||
TCharacter:
|
||||
.char_Symbol db ?
|
||||
.char_Attribute db ?
|
||||
.size = $
|
||||
end virtual
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
virtual at 0
|
||||
TLine:
|
||||
.cons_Symbols rb (TCharacter.size * CONSOLE_COLS)
|
||||
.size = $
|
||||
end virtual
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
virtual at 0
|
||||
TConsole:
|
||||
.cons_Rows rb (TLine.size * (CONSOLE_ROWS - 1))
|
||||
.cons_LastRow rb TLine.size
|
||||
.cons_CaretColumn INDEX ?
|
||||
.cons_ActiveColor INDEX ?
|
||||
.cons_Attributes COLORREFS CONSOLE_ATTRS
|
||||
.size = $
|
||||
end virtual
|
||||
|
||||
; --- EOF ---
|
@ -1,848 +0,0 @@
|
||||
; --------------------------------------------------------------------------
|
||||
; FILE: TDock.Asm
|
||||
; DATE: October 25, 2008
|
||||
; --------------------------------------------------------------------------
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; ABANDON
|
||||
; --------------------------------------------------------------------------
|
||||
virtual at 0
|
||||
loc86:
|
||||
.pTrekData PVOID ?
|
||||
.nAttempts COUNT ?
|
||||
.dbl_ShuttleDamage DOUBLE ?
|
||||
.dbl_padding DOUBLE ?
|
||||
.nBaseSectorX INT32 ?
|
||||
.nBaseSectorY INT32 ?
|
||||
.nFQSectorX INT32 ?
|
||||
.nFQSectorY INT32 ?
|
||||
.size = $
|
||||
end virtual
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TDock_Abandon:
|
||||
mcBeginLocals loc86.size
|
||||
|
||||
mcLoadGameDataPtr esi
|
||||
mcStoreLocal loc86.pTrekData, esi
|
||||
|
||||
mov cl, DEV_SHUTTLE_CRAFT
|
||||
call TArray_GetDblDamage
|
||||
fstp [esp + loc86.dbl_ShuttleDamage]
|
||||
|
||||
fld [esp + loc86.dbl_ShuttleDamage]
|
||||
fldz
|
||||
mc_CMP_ST0_ST1
|
||||
jc .L10
|
||||
jz .L15
|
||||
|
||||
fld [esp + loc86.dbl_ShuttleDamage]
|
||||
fld1
|
||||
fchs
|
||||
mc_CMP_ST0_ST1
|
||||
jz .L6
|
||||
|
||||
mov ecx, 443
|
||||
call TConsole_ProutGameMsg
|
||||
jmp .done
|
||||
|
||||
.L6:
|
||||
mov ecx, 444
|
||||
call TConsole_ProutGameMsg
|
||||
jmp .done
|
||||
|
||||
.L10:
|
||||
mov ecx, 445
|
||||
call TConsole_ProutGameMsg
|
||||
jmp .done
|
||||
|
||||
.L15:
|
||||
mcLoadLocal esi, loc86.pTrekData
|
||||
cmp [esi + TREKDATA.LANDED], 1
|
||||
jne .check1
|
||||
|
||||
.must_be_aboard:
|
||||
mov ecx, 675
|
||||
call TConsole_ProutGameMsg
|
||||
jmp .done
|
||||
|
||||
.check1:
|
||||
cmp [esi + TREKDATA.ICRAFT], 1
|
||||
je .must_be_aboard
|
||||
|
||||
cmp [esi + TREKDATA.ISCRAFT], 1
|
||||
je .L17
|
||||
|
||||
mov ecx, 674
|
||||
call TConsole_ProutGameMsg
|
||||
jmp .done
|
||||
|
||||
.L17:
|
||||
call TConsole_ScrollUp
|
||||
mov cl, ATTR_COND_RED
|
||||
call TConsole_SetAttr
|
||||
mov ecx, 676
|
||||
call TConsole_Prout
|
||||
inc ecx
|
||||
call TConsole_Prout
|
||||
call TConsole_ScrollUp
|
||||
|
||||
invoke Sleep, 800
|
||||
|
||||
mov ecx, 678
|
||||
call TConsole_ProutGameMsg
|
||||
inc ecx
|
||||
call TConsole_Prout
|
||||
inc ecx
|
||||
call TConsole_Prout
|
||||
|
||||
mcLoadLocal esi, loc86.pTrekData
|
||||
cmp [esi + TREKDATA.REMBASE], 0
|
||||
je .finished
|
||||
|
||||
invoke Sleep, 800
|
||||
|
||||
call TConsole_ScrollUp
|
||||
mov ecx, 681
|
||||
call TConsole_Prout
|
||||
inc ecx
|
||||
call TConsole_Prout
|
||||
inc ecx
|
||||
call TConsole_Prout
|
||||
inc ecx
|
||||
call TConsole_Prout
|
||||
inc ecx
|
||||
call TConsole_Prout
|
||||
|
||||
mcLoadLocal esi, loc86.pTrekData
|
||||
mcZeroBits eax
|
||||
mov [esi + TREKDATA.ICRYSTL], al
|
||||
mov [esi + TREKDATA.IMINE], al
|
||||
mov [esi + TREKDATA.ISCATE], al
|
||||
|
||||
movzx edx, [esi + TREKDATA.REMBASE]
|
||||
call TRandom_IRan
|
||||
mov ecx, eax
|
||||
|
||||
mcLoadLocal ebx, loc86.pTrekData
|
||||
mcLoadMemberRef esi, TREKDATA.BASEQX
|
||||
mcLoadMemberRef edi, TREKDATA.BASEQY
|
||||
mov al, [esi + ecx]
|
||||
mov dl, [edi + ecx]
|
||||
mcStoreMember TREKDATA.QUADX, al
|
||||
mcStoreMember TREKDATA.QUADY, dl
|
||||
|
||||
.L40:
|
||||
mov al, 5
|
||||
mcStoreMember TREKDATA.SECTX, al
|
||||
mcStoreMember TREKDATA.SECTY, al
|
||||
|
||||
call TCommon_NewQuad
|
||||
|
||||
mov al, 5
|
||||
mov dl, al
|
||||
call TArray_QuadPtr
|
||||
mov byte [ebx], CHAR_COSMOS
|
||||
;
|
||||
; Three attempts to put F.Q. beside the base
|
||||
;
|
||||
mcLoad8bitsToReg32 eax, 3
|
||||
mcStoreLocal loc86.nAttempts, eax
|
||||
|
||||
mcLoadLocal esi, loc86.pTrekData
|
||||
movzx eax, [esi + TREKDATA.BASEX]
|
||||
movzx edx, [esi + TREKDATA.BASEY]
|
||||
mcStoreLocal loc86.nBaseSectorX, eax
|
||||
mcStoreLocal loc86.nBaseSectorY, edx
|
||||
|
||||
.attempt:
|
||||
mcLoad8bitsToReg32 edx, 3
|
||||
call TRandom_IRan
|
||||
dec eax
|
||||
add eax, [esp + loc86.nBaseSectorX]
|
||||
mcStoreLocal loc86.nFQSectorX, eax
|
||||
call TPhotons_IsValidSector
|
||||
jnc .next_attempt
|
||||
|
||||
mcLoad8bitsToReg32 edx, 3
|
||||
call TRandom_IRan
|
||||
dec eax
|
||||
add eax, [esp + loc86.nBaseSectorY]
|
||||
mcStoreLocal loc86.nFQSectorY, eax
|
||||
call TPhotons_IsValidSector
|
||||
jnc .next_attempt
|
||||
|
||||
mcLoadLocal eax, loc86.nFQSectorX
|
||||
mcLoadLocal edx, loc86.nFQSectorY
|
||||
call TArray_QuadPtr
|
||||
cmp byte [ebx], CHAR_COSMOS
|
||||
je .L60
|
||||
|
||||
.next_attempt:
|
||||
dec [esp + loc86.nAttempts]
|
||||
jnz .attempt
|
||||
jmp .L40
|
||||
|
||||
.L60:
|
||||
mov byte [ebx], CHAR_FQUEENE
|
||||
mcLoadLocal esi, loc86.pTrekData
|
||||
mov [esi + TREKDATA.SHIP], CHAR_FQUEENE
|
||||
mov [esi + TREKDATA.CONDIT], CONDITION_DOCKED
|
||||
|
||||
mcLoadLocal eax, loc86.nFQSectorX
|
||||
mcLoadLocal edx, loc86.nFQSectorY
|
||||
mov [esi + TREKDATA.SECTX], al
|
||||
mov [esi + TREKDATA.SECTY], dl
|
||||
|
||||
lea edi, [esi + TREKDATA.DAMAGE]
|
||||
mcLoad8bitsToReg32 ecx, 14
|
||||
|
||||
.clear_damages:
|
||||
fldz
|
||||
fstp tbyte [edi]
|
||||
add edi, 10
|
||||
loop .clear_damages
|
||||
|
||||
fld [glb_dbl_3000]
|
||||
fld st
|
||||
fstp [esi + TREKDATA.INENRG]
|
||||
fstp [esi + TREKDATA.ENERGY]
|
||||
|
||||
fld [glb_dbl_1250]
|
||||
fld st
|
||||
fstp [esi + TREKDATA.INSHLD]
|
||||
fstp [esi + TREKDATA.SHLD]
|
||||
|
||||
mov al, 6
|
||||
mov [esi + TREKDATA.INTORPS], al
|
||||
mov [esi + TREKDATA.TORPS], al
|
||||
|
||||
fld [glb_dbl_3]
|
||||
fld st
|
||||
fstp [esi + TREKDATA.INLSR]
|
||||
fstp [esi + TREKDATA.LSUPRES]
|
||||
|
||||
mov [esi + TREKDATA.SHLDUP], 0
|
||||
|
||||
fld [glb_dbl_5]
|
||||
fstp [esi + TREKDATA.WARPFAC]
|
||||
|
||||
fld [glb_dbl_25]
|
||||
fstp [esi + TREKDATA.WFACSQ]
|
||||
jmp .done
|
||||
|
||||
.finished:
|
||||
mov al, 9
|
||||
call TFinish_Main
|
||||
|
||||
.done:
|
||||
mcEndLocals loc86.size
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; DREPORT
|
||||
; --------------------------------------------------------------------------
|
||||
virtual at 0
|
||||
loc38:
|
||||
.nJDAM INT32 ?
|
||||
.pDAMAGE PDOUBLE ?
|
||||
.nL INDEX ?
|
||||
.size = $
|
||||
end virtual
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TDock_DamageReport:
|
||||
mcBeginLocals loc38.size
|
||||
|
||||
mcZeroBits eax
|
||||
mcStoreLocal loc38.nJDAM, eax
|
||||
|
||||
inc eax
|
||||
mcStoreLocal loc38.nL, eax
|
||||
|
||||
mcLoadGameDataPtr esi
|
||||
add esi, TREKDATA.DAMAGE
|
||||
mcStoreLocal loc38.pDAMAGE, esi
|
||||
|
||||
.check_device:
|
||||
fldz
|
||||
mcLoadLocal ebx, loc38.pDAMAGE
|
||||
fld tbyte [ebx]
|
||||
mc_CMP_ST0_ST1
|
||||
jc .L20
|
||||
jz .L20
|
||||
|
||||
cmp [esp + loc38.nJDAM], 0
|
||||
jne .L10
|
||||
|
||||
mov cl, ATTR_SCAN_SCALE
|
||||
call TConsole_SetAttr
|
||||
call TConsole_ScrollUp
|
||||
mov ecx, 270
|
||||
call TConsole_Prout
|
||||
mov ecx, 271
|
||||
call TConsole_Prout
|
||||
inc [esp + loc38.nJDAM]
|
||||
|
||||
.L10:
|
||||
mov cl, 2
|
||||
call TConsole_RepeatBlank
|
||||
|
||||
mov cl, ATTR_REPORT_TEXT
|
||||
call TConsole_SetAttr
|
||||
|
||||
mov dl, 22
|
||||
mcLoadLocal ecx, loc38.nL
|
||||
add ecx, 59
|
||||
call TConsole_CramString
|
||||
|
||||
mov cl, ATTR_REPORT_VALUE
|
||||
call TConsole_SetAttr
|
||||
|
||||
cmp [esp + loc38.nL], 14
|
||||
je .deathray
|
||||
|
||||
mcLoadLocal esi, loc38.pDAMAGE
|
||||
fld tbyte [esi]
|
||||
fld [glb_dbl_0dot005]
|
||||
faddp
|
||||
mov cl, 2
|
||||
mov dl, 5
|
||||
call TConsole_CramFloatWidth
|
||||
jmp .docked_value
|
||||
|
||||
.deathray:
|
||||
mov ecx, 269
|
||||
call TConsole_Cram
|
||||
|
||||
.docked_value:
|
||||
mcLoadLocal esi, loc38.pDAMAGE
|
||||
fld tbyte [esi]
|
||||
fld [glb_dbl_DOCKFAC]
|
||||
fmulp
|
||||
fld [glb_dbl_0dot005]
|
||||
faddp
|
||||
mov cl, 2
|
||||
mov dl, 10
|
||||
call TConsole_CramFloatWidth
|
||||
call TConsole_ScrollUp
|
||||
|
||||
.L20:
|
||||
;
|
||||
; Next device
|
||||
;
|
||||
add [esp + loc38.pDAMAGE], 10
|
||||
inc [esp + loc38.nL]
|
||||
cmp [esp + loc38.nL], 14
|
||||
jbe .check_device
|
||||
|
||||
cmp [esp + loc38.nJDAM], 0
|
||||
jne .done
|
||||
|
||||
call TConsole_ScrollUp
|
||||
call TConsole_SetGameMsgAttr
|
||||
mov ecx, 268
|
||||
call TConsole_Prout
|
||||
|
||||
.done:
|
||||
call TConsole_ScrollUp
|
||||
mcEndLocals loc38.size
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; This function will check if sufficient time passed between dockings to
|
||||
; prevent the cheating by docking a few times in a row and getting
|
||||
; additional photon tubes, quantum charges, etc.
|
||||
; --------------------------------------------------------------------------
|
||||
; Returns CF=1 if additional devices are allowed.
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TDock_IsTime4Goodies:
|
||||
mcLoadGameDataPtr esi
|
||||
|
||||
fld [esi + TREKDATA.DATE]
|
||||
fld [esi + TREKDATA.DOCKDATE]
|
||||
fsubp
|
||||
fld [glb_dbl_0dot8]
|
||||
mc_CMP_ST0_ST1
|
||||
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Check if enhanced torpedoes available
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TDock_GetQuantumCharges:
|
||||
call TDock_IsTime4Goodies
|
||||
jnc .done
|
||||
|
||||
mcLoadGameDataPtr esi
|
||||
|
||||
cmp [esi + TREKDATA.QTORPS], 1
|
||||
je .done
|
||||
cmp [esi + TREKDATA.SKILL], 5
|
||||
jb .done
|
||||
|
||||
mcLoad8bitsToReg32 edx, 100
|
||||
call TRandom_IRan
|
||||
inc eax
|
||||
cmp eax, 25
|
||||
ja .done
|
||||
|
||||
mcLoadGameDataPtr edi
|
||||
inc [edi + TREKDATA.QTORPS]
|
||||
|
||||
mcZeroBits ecx
|
||||
cmp [edi + TREKDATA.SHIP], CHAR_ENTERPRISE
|
||||
sete cl
|
||||
mov al, 8
|
||||
shl al, cl
|
||||
mov [edi + TREKDATA.TORPS], al
|
||||
|
||||
.report:
|
||||
call TConsole_SetCrewMsgAttr
|
||||
mov ecx, 707
|
||||
call TConsole_Prout
|
||||
|
||||
.done:
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Check if additional photon tubes were installed
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TDock_InstallTubes:
|
||||
mcBeginLocals 4
|
||||
|
||||
mcLoadGameDataPtr esi
|
||||
cmp [esi + TREKDATA.SKILL], 5
|
||||
jb .done
|
||||
|
||||
cmp [esi + TREKDATA.NPTUBES], 3
|
||||
ja .done
|
||||
|
||||
mcLoad8bitsToReg32 edx, 100
|
||||
call TRandom_IRan
|
||||
inc eax
|
||||
cmp eax, 20
|
||||
ja .done
|
||||
|
||||
call TRandom_Ranf
|
||||
fld [glb_dbl_3]
|
||||
fmulp
|
||||
call TCommon_FP_Truncate
|
||||
inc eax
|
||||
mov [esp], eax
|
||||
|
||||
mcLoadGameDataPtr edi
|
||||
add [edi + TREKDATA.NPTUBES], al
|
||||
|
||||
call TConsole_SetCrewMsgAttr
|
||||
mov ecx, 701
|
||||
call TConsole_Cram
|
||||
|
||||
mov eax, [esp]
|
||||
call TConsole_CramInt
|
||||
|
||||
mov ecx, 702
|
||||
call TConsole_Cram
|
||||
|
||||
cmp dword [esp], 1
|
||||
je .skip
|
||||
|
||||
mov al, 'S'
|
||||
call TConsole_PutChar
|
||||
|
||||
.skip:
|
||||
mov ecx, 703
|
||||
call TConsole_Prout
|
||||
|
||||
.done:
|
||||
mcEndLocals 4
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; DOCK
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TDock_Main:
|
||||
call TConsole_SetGameMsgAttr
|
||||
|
||||
mcLoadGameDataPtr esi
|
||||
mov [esi + TREKDATA.IDIDIT], 0
|
||||
|
||||
cmp [esi + TREKDATA.CONDIT], CONDITION_DOCKED
|
||||
je .L30
|
||||
|
||||
cmp [esi + TREKDATA.INORBIT], 0
|
||||
jne .L40
|
||||
|
||||
cmp [esi + TREKDATA.BASEX], 0
|
||||
je .L5
|
||||
|
||||
mov al, [esi + TREKDATA.SECTX]
|
||||
mov dl, [esi + TREKDATA.SECTY]
|
||||
sub al, [esi + TREKDATA.BASEX]
|
||||
sub dl, [esi + TREKDATA.BASEY]
|
||||
movsx eax, al
|
||||
movsx edx, dl
|
||||
|
||||
call TCommon_AbsEAX
|
||||
cmp eax, 1
|
||||
ja .L5
|
||||
|
||||
mov eax, edx
|
||||
call TCommon_AbsEAX
|
||||
cmp eax, 1
|
||||
jbe .L10
|
||||
|
||||
.L5:
|
||||
call TConsole_CramShip
|
||||
mov ecx, 264
|
||||
jmp .msg_end
|
||||
|
||||
.L10:
|
||||
mcLoadGameDataPtr edi
|
||||
mov [edi + TREKDATA.CONDIT], CONDITION_DOCKED
|
||||
|
||||
mov ecx, 265
|
||||
call TConsole_Prout
|
||||
|
||||
call TDock_InstallTubes
|
||||
call TDock_GetQuantumCharges
|
||||
|
||||
mcLoadGameDataPtr edi
|
||||
inc [edi + TREKDATA.IDIDIT]
|
||||
|
||||
fld [edi + TREKDATA.INSHLD]
|
||||
fstp [edi + TREKDATA.SHLD]
|
||||
|
||||
fld [edi + TREKDATA.INLSR]
|
||||
fstp [edi + TREKDATA.LSUPRES]
|
||||
|
||||
cmp [edi + TREKDATA.QTORPS], 1
|
||||
je .check_power
|
||||
|
||||
mov al, [edi + TREKDATA.INTORPS]
|
||||
mov [edi + TREKDATA.TORPS], al
|
||||
|
||||
.check_power:
|
||||
fld [edi + TREKDATA.INENRG]
|
||||
fld [edi + TREKDATA.ENERGY]
|
||||
mc_CMP_ST0_ST1
|
||||
jc .refuel
|
||||
ret
|
||||
|
||||
.refuel:
|
||||
fld [edi + TREKDATA.INENRG]
|
||||
fstp [edi + TREKDATA.ENERGY]
|
||||
ret
|
||||
|
||||
.L30:
|
||||
mov ecx, 266
|
||||
jmp .msg_end
|
||||
|
||||
.L40:
|
||||
mov ecx, 267
|
||||
|
||||
.msg_end:
|
||||
call TConsole_Prout
|
||||
|
||||
mcLoadGameDataPtr esi
|
||||
fld [esi + TREKDATA.DATE]
|
||||
fstp [esi + TREKDATA.DOCKDATE]
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; HELP
|
||||
; --------------------------------------------------------------------------
|
||||
virtual at 0
|
||||
loc49:
|
||||
.pTrekData PVOID ?
|
||||
.dbl_DIST DOUBLE ?
|
||||
.dbl_XDIST DOUBLE ?
|
||||
.dbl_TEMP1 DOUBLE ?
|
||||
.dbl_TEMP2 DOUBLE ?
|
||||
.dbl_PROBF DOUBLE ?
|
||||
.nIX BYTE ?
|
||||
.nIY BYTE ?
|
||||
.nLINE INDEX ?
|
||||
.nL INDEX ?
|
||||
.nLL INDEX ?
|
||||
.nSUM INT32 ?
|
||||
.size = $
|
||||
end virtual
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TDock_Help:
|
||||
mcBeginLocals loc49.size
|
||||
|
||||
mcLoadGameDataPtr esi
|
||||
mcStoreLocal loc49.pTrekData, esi
|
||||
|
||||
cmp [esi + TREKDATA.CONDIT], CONDITION_DOCKED
|
||||
jne .L10
|
||||
|
||||
call TConsole_SetCrewMsgAttr
|
||||
mov ecx, 562
|
||||
call TConsole_Prout
|
||||
jmp .done
|
||||
|
||||
.L10:
|
||||
mov cl, DEV_SUBSPACE_RADIO
|
||||
call TArray_IsDamaged
|
||||
jnc .L20
|
||||
|
||||
mov ecx, 563
|
||||
call TConsole_ProutGameMsg
|
||||
jmp .done
|
||||
|
||||
.L20:
|
||||
mcLoadLocal esi, loc49.pTrekData
|
||||
cmp [esi + TREKDATA.REMBASE], 0
|
||||
jne .L30
|
||||
|
||||
call TConsole_SetCrewMsgAttr
|
||||
mov ecx, 564
|
||||
call TConsole_Prout
|
||||
jmp .done
|
||||
|
||||
.L30:
|
||||
cmp [esi + TREKDATA.LANDED], 1
|
||||
jne .L31
|
||||
|
||||
call TConsole_SetGameMsgAttr
|
||||
mov ecx, 565
|
||||
call TConsole_Cram
|
||||
call TConsole_CramShip
|
||||
mov al, '.'
|
||||
call TConsole_PutChar
|
||||
call TConsole_ScrollUp
|
||||
jmp .done
|
||||
|
||||
.L31:
|
||||
cmp [esi + TREKDATA.ISCRAFT], 0
|
||||
jne .L32
|
||||
|
||||
mov ecx, 407
|
||||
call TConsole_ProutGameMsg
|
||||
jmp .done
|
||||
|
||||
.L32:
|
||||
inc [esi + TREKDATA.NHELP]
|
||||
cmp [esi + TREKDATA.BASEX], 0
|
||||
je .L40
|
||||
|
||||
mov al, [esi + TREKDATA.BASEX]
|
||||
sub al, [esi + TREKDATA.SECTX]
|
||||
movzx eax, al
|
||||
imul eax, eax
|
||||
|
||||
mov dl, [esi + TREKDATA.BASEY]
|
||||
sub dl, [esi + TREKDATA.SECTY]
|
||||
movzx edx, dl
|
||||
imul edx, edx
|
||||
|
||||
add eax, edx
|
||||
call TCommon_FPU_Load_EAX
|
||||
fsqrt
|
||||
fstp [esp + loc49.dbl_DIST]
|
||||
jmp .L60
|
||||
|
||||
.L40:
|
||||
fld [glb_dbl_1000]
|
||||
fstp [esp + loc49.dbl_DIST]
|
||||
|
||||
movzx ecx, [esi + TREKDATA.REMBASE]
|
||||
lea edi, [esi + TREKDATA.BASEQX]
|
||||
lea ebx, [esi + TREKDATA.BASEQY]
|
||||
mcZeroBits edx
|
||||
|
||||
.check_base_distance:
|
||||
mov al, [edi]
|
||||
sub al, [esi + TREKDATA.QUADX]
|
||||
movsx eax, al
|
||||
imul eax, eax
|
||||
mcStoreLocal loc49.nSUM, eax
|
||||
|
||||
mov al, [ebx]
|
||||
sub al, [esi + TREKDATA.QUADY]
|
||||
movsx eax, al
|
||||
imul eax, eax
|
||||
add eax, [esp + loc49.nSUM]
|
||||
|
||||
call TCommon_FPU_Load_EAX
|
||||
fsqrt
|
||||
fld [glb_dbl_Ten]
|
||||
fmulp
|
||||
fld st
|
||||
fstp [esp + loc49.dbl_XDIST]
|
||||
|
||||
fld [esp + loc49.dbl_DIST]
|
||||
mc_CMP_ST0_ST1
|
||||
jc .next_base
|
||||
|
||||
fld [esp + loc49.dbl_XDIST]
|
||||
fstp [esp + loc49.dbl_DIST]
|
||||
mcStoreLocal loc49.nLINE, edx
|
||||
|
||||
.next_base:
|
||||
inc edi
|
||||
inc ebx
|
||||
inc edx
|
||||
loop .check_base_distance
|
||||
|
||||
lea edi, [esi + TREKDATA.BASEQX]
|
||||
lea ebx, [esi + TREKDATA.BASEQY]
|
||||
mcLoadLocal ecx, loc49.nLINE
|
||||
|
||||
mov al, [edi + ecx]
|
||||
mov dl, [ebx + ecx]
|
||||
mov [esi + TREKDATA.QUADX], al
|
||||
mov [esi + TREKDATA.QUADY], dl
|
||||
|
||||
inc [esi + TREKDATA.SHUTUP]
|
||||
push esi
|
||||
call TCommon_NewQuad
|
||||
pop esi
|
||||
dec [esi + TREKDATA.SHUTUP]
|
||||
|
||||
.L60:
|
||||
mov al, [esi + TREKDATA.SECTX]
|
||||
mov dl, [esi + TREKDATA.SECTY]
|
||||
call TArray_QuadPtr
|
||||
mov byte [ebx], CHAR_COSMOS
|
||||
|
||||
call TConsole_SetGameMsgAttr
|
||||
mov ecx, 199
|
||||
call TConsole_Cram
|
||||
|
||||
mov cl, 1
|
||||
mcLoadLocal esi, loc49.pTrekData
|
||||
mov al, [esi + TREKDATA.QUADX]
|
||||
mov dl, [esi + TREKDATA.QUADY]
|
||||
call TConsole_CramLoc
|
||||
mov ecx, 566
|
||||
call TConsole_Cram
|
||||
call TConsole_CramShip
|
||||
mov ecx, 567
|
||||
call TConsole_Prout
|
||||
|
||||
mov esi, glb_dbl_0dot98
|
||||
mcLoadLocalRef edi, loc49.dbl_DIST
|
||||
call TCommon_X_exp_Y
|
||||
fld1
|
||||
fsubrp
|
||||
fstp [esp + loc49.dbl_TEMP1]
|
||||
|
||||
fld1
|
||||
fld [glb_dbl_3]
|
||||
fdivp
|
||||
fstp [esp + loc49.dbl_TEMP2]
|
||||
|
||||
mcLoadLocalRef esi, loc49.dbl_TEMP1
|
||||
mcLoadLocalRef edi, loc49.dbl_TEMP2
|
||||
call TCommon_X_exp_Y
|
||||
fstp [esp + loc49.dbl_PROBF]
|
||||
|
||||
mcLoad1 eax
|
||||
mcStoreLocal loc49.nL, eax
|
||||
call TConsole_SetGameMsgAttr
|
||||
|
||||
.attempt:
|
||||
mov ecx, 567
|
||||
add ecx, [esp + loc49.nL]
|
||||
call TConsole_Cram
|
||||
|
||||
mov ecx, 571
|
||||
call TConsole_Cram
|
||||
call TConsole_CramShip
|
||||
mov ecx, 572
|
||||
call TConsole_Cram
|
||||
invoke Sleep, 1200
|
||||
|
||||
call TRandom_Ranf
|
||||
fld [esp + loc49.dbl_PROBF]
|
||||
mc_CMP_ST0_ST1
|
||||
jc .L90
|
||||
|
||||
.L70:
|
||||
mov ecx, 573
|
||||
call TConsole_Prout
|
||||
|
||||
inc [esp + loc49.nL]
|
||||
cmp [esp + loc49.nL], 3
|
||||
jbe .attempt
|
||||
|
||||
mov al, 11
|
||||
call TFinish_Main
|
||||
jmp .done
|
||||
|
||||
.L90:
|
||||
mcLoad1 eax
|
||||
mcStoreLocal loc49.nLL, eax
|
||||
|
||||
mcLoadLocal esi, loc49.pTrekData
|
||||
|
||||
.find_adjacent_pos:
|
||||
call TRandom_Ranf
|
||||
fld [glb_dbl_3]
|
||||
fmulp
|
||||
call TCommon_FP_Truncate
|
||||
add al, [esi + TREKDATA.BASEX]
|
||||
dec eax
|
||||
call TPhotons_IsValidSector
|
||||
jnc .next_adjacent_try
|
||||
mcStoreLocal loc49.nIX, al
|
||||
|
||||
call TRandom_Ranf
|
||||
fld [glb_dbl_3]
|
||||
fmulp
|
||||
call TCommon_FP_Truncate
|
||||
add al, [esi + TREKDATA.BASEY]
|
||||
dec eax
|
||||
call TPhotons_IsValidSector
|
||||
jnc .next_adjacent_try
|
||||
mcStoreLocal loc49.nIY, al
|
||||
|
||||
mcLoadLocal al, loc49.nIX
|
||||
mcLoadLocal dl, loc49.nIY
|
||||
call TArray_QuadPtr
|
||||
cmp byte [ebx], CHAR_COSMOS
|
||||
je .L110
|
||||
|
||||
.next_adjacent_try:
|
||||
inc [esp + loc49.nLL]
|
||||
cmp [esp + loc49.nLL], 5
|
||||
jbe .find_adjacent_pos
|
||||
jmp .L70
|
||||
|
||||
.L110:
|
||||
push ebx
|
||||
mov ecx, 574
|
||||
call TConsole_Prout
|
||||
pop ebx
|
||||
|
||||
mcLoadLocal esi, loc49.pTrekData
|
||||
mcLoadLocal al, loc49.nIX
|
||||
mcLoadLocal dl, loc49.nIY
|
||||
mov [esi + TREKDATA.SECTX], al
|
||||
mov [esi + TREKDATA.SECTY], dl
|
||||
|
||||
mov al, [esi + TREKDATA.SHIP]
|
||||
mov byte [ebx], al
|
||||
|
||||
call TCommon_ResetDist
|
||||
call TCommon_SortKlingons
|
||||
call TDock_Main
|
||||
|
||||
call TConsole_ScrollUp
|
||||
call TConsole_SetCrewMsgAttr
|
||||
mov ecx, 575
|
||||
call TConsole_Prout
|
||||
|
||||
.done:
|
||||
mcEndLocals loc49.size
|
||||
ret
|
||||
|
||||
; --- EOF ---
|
File diff suppressed because it is too large
Load Diff
@ -1,551 +0,0 @@
|
||||
; --------------------------------------------------------------------------
|
||||
; FILE: TFinish.Asm
|
||||
; DATE: October 13, 2008
|
||||
; --------------------------------------------------------------------------
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; FINISH
|
||||
; --------------------------------------------------------------------------
|
||||
; Input:
|
||||
; AL = game ending code
|
||||
; --------------------------------------------------------------------------
|
||||
virtual at 0
|
||||
loc47:
|
||||
.pTrekData PVOID ?
|
||||
.bIGotIt BOOL ?
|
||||
.nEndCode INT32 ?
|
||||
.dbl_DateDiff DOUBLE ?
|
||||
.dbl_RateMax DOUBLE ?
|
||||
.dbl_PerDate DOUBLE ?
|
||||
.dbl_Goodies DOUBLE ?
|
||||
.dbl_Baddies DOUBLE ?
|
||||
.dbl_Advantage DOUBLE ?
|
||||
.size = $
|
||||
end virtual
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TFinish_Main:
|
||||
mcBeginLocals loc47.size
|
||||
|
||||
movzx eax, al
|
||||
mcStoreLocal loc47.nEndCode, eax
|
||||
|
||||
invoke Sleep, 1000
|
||||
|
||||
mcLoadGameDataPtr edi
|
||||
mcStoreLocal loc47.pTrekData, edi
|
||||
inc [edi + TREKDATA.ALLDONE]
|
||||
|
||||
mcZeroBits eax
|
||||
mcStoreLocal loc47.bIGotIt, eax
|
||||
|
||||
call TConsole_ScrollUp
|
||||
call TConsole_ScrollUp
|
||||
call TConsole_ScrollUp
|
||||
mov cl, ATTR_SHIP
|
||||
call TConsole_SetAttr
|
||||
|
||||
mov ecx, 477
|
||||
call TConsole_Cram
|
||||
|
||||
mov cl, 1
|
||||
mcLoadLocal esi, loc47.pTrekData
|
||||
fld [esi + TREKDATA.DATE]
|
||||
call TConsole_CramFloat
|
||||
|
||||
mov ecx, 478
|
||||
call TConsole_Prout
|
||||
call TConsole_ScrollUp
|
||||
|
||||
mcLoadLocal eax, loc47.nEndCode
|
||||
mcOnRegEqu eax, 1, .L100
|
||||
mcOnRegEqu eax, 2, .L200
|
||||
mcOnRegEqu eax, 3, .L300
|
||||
mcOnRegEqu eax, 4, .L400
|
||||
mcOnRegEqu eax, 5, .L500
|
||||
mcOnRegEqu eax, 6, .L600
|
||||
mcOnRegEqu eax, 7, .L700
|
||||
mcOnRegEqu eax, 8, .L800
|
||||
mcOnRegEqu eax, 9, .L900
|
||||
mcOnRegEqu eax, 10, .L1000
|
||||
mcOnRegEqu eax, 11, .L1100
|
||||
mcOnRegEqu eax, 12, .L5000
|
||||
mcOnRegEqu eax, 13, .L1300
|
||||
mcOnRegEqu eax, 14, .L1400
|
||||
mcOnRegEqu eax, 15, .L1500
|
||||
mcOnRegEqu eax, 16, .L1600
|
||||
mcOnRegEqu eax, 17, .L1700
|
||||
mcOnRegEqu eax, 18, .L1800
|
||||
mcOnRegEqu eax, 21, .L2100
|
||||
mcOnRegEqu eax, 22, .L2200
|
||||
|
||||
;int 3
|
||||
jmp .done
|
||||
|
||||
.L100:
|
||||
mcLoadLocal esi, loc47.pTrekData
|
||||
cmp [esi + TREKDATA.NROMREM], 0
|
||||
je .L105
|
||||
|
||||
movzx eax, [esi + TREKDATA.NROMREM]
|
||||
push eax
|
||||
|
||||
mov ecx, 479
|
||||
call TConsole_Cram
|
||||
pop eax
|
||||
call TConsole_CramInt
|
||||
mov ecx, 480
|
||||
call TConsole_Prout
|
||||
call TConsole_ScrollUp
|
||||
|
||||
.L105:
|
||||
mov ecx, 481
|
||||
call TConsole_Prout
|
||||
mov ecx, 482
|
||||
call TConsole_Prout
|
||||
|
||||
mcLoadLocal esi, loc47.pTrekData
|
||||
mov [esi + TREKDATA.GAMEWON], 1
|
||||
|
||||
cmp [esi + TREKDATA.ALIVE], 0
|
||||
je .L130
|
||||
cmp [esi + TREKDATA.BASEKL], 0
|
||||
jne .L130
|
||||
cmp [esi + TREKDATA.SHIP], CHAR_ENTERPRISE
|
||||
jne .L130
|
||||
|
||||
movzx eax, [esi + TREKDATA.STARKL]
|
||||
imul eax, 5
|
||||
|
||||
movzx ecx, [esi + TREKDATA.CASUAL]
|
||||
add eax, ecx
|
||||
|
||||
movzx ecx, [esi + TREKDATA.NPLANKL]
|
||||
imul ecx, 10
|
||||
add eax, ecx
|
||||
|
||||
movzx ecx, [esi + TREKDATA.NHELP]
|
||||
imul ecx, 45
|
||||
add eax, ecx
|
||||
|
||||
cmp eax, 100
|
||||
jae .L130
|
||||
|
||||
fld [glb_dbl_5]
|
||||
fld [esi + TREKDATA.DATE]
|
||||
fld [esi + TREKDATA.INDATE]
|
||||
fsubp
|
||||
fld st
|
||||
fstp [esp + loc47.dbl_DateDiff]
|
||||
mc_CMP_ST0_ST1
|
||||
jc .L110
|
||||
|
||||
mov al, [esi + TREKDATA.SKILL]
|
||||
call TCommon_LoadByteIntoFPU
|
||||
fld [glb_dbl_0dot1]
|
||||
fmulp
|
||||
inc al
|
||||
call TCommon_LoadByteIntoFPU
|
||||
fmulp
|
||||
fld [glb_dbl_0dot1]
|
||||
faddp
|
||||
fstp [esp + loc47.dbl_RateMax]
|
||||
|
||||
mov al, [esi + TREKDATA.KILLK]
|
||||
add al, [esi + TREKDATA.KILLC]
|
||||
add al, [esi + TREKDATA.NSCKILL]
|
||||
fld [esp + loc47.dbl_DateDiff]
|
||||
fdivp
|
||||
fstp [esp + loc47.dbl_PerDate]
|
||||
|
||||
fld [esp + loc47.dbl_RateMax]
|
||||
fld [esp + loc47.dbl_PerDate]
|
||||
mc_CMP_ST0_ST1
|
||||
jc .L130
|
||||
|
||||
.L110:
|
||||
call TConsole_ScrollUp
|
||||
mov ecx, 483
|
||||
call TConsole_Prout
|
||||
|
||||
mcLoadLocal esi, loc47.pTrekData
|
||||
cmp [esi + TREKDATA.SKILL], 4
|
||||
je .L120
|
||||
cmp [esi + TREKDATA.SKILL], 5
|
||||
je .L125
|
||||
|
||||
mov ecx, 484
|
||||
call TConsole_Cram
|
||||
|
||||
mov ecx, 484
|
||||
mcLoadLocal esi, loc47.pTrekData
|
||||
movzx eax, [esi + TREKDATA.SKILL]
|
||||
add ecx, eax
|
||||
call TConsole_Prout
|
||||
|
||||
mov ecx, 488
|
||||
call TConsole_Prout
|
||||
jmp .L130
|
||||
|
||||
.L120:
|
||||
mov ecx, 489
|
||||
call TConsole_Prout
|
||||
inc [esp + loc47.bIGotIt]
|
||||
|
||||
call TConsole_ScrollUp
|
||||
mov ecx, 490
|
||||
call TConsole_Prout
|
||||
mov ecx, 491
|
||||
call TConsole_Prout
|
||||
mov ecx, 492
|
||||
call TConsole_Prout
|
||||
jmp .L130
|
||||
|
||||
.L125:
|
||||
call TConsole_ScrollUp
|
||||
mov ecx, 493
|
||||
call TConsole_Prout
|
||||
|
||||
call TConsole_ScrollUp
|
||||
mov ecx, 494
|
||||
call TConsole_Prout
|
||||
|
||||
mov ecx, 495
|
||||
call TConsole_Prout
|
||||
mov ecx, 495
|
||||
call TConsole_Prout
|
||||
mov ecx, 495
|
||||
call TConsole_Prout
|
||||
mov ecx, 496
|
||||
call TConsole_Prout
|
||||
call TConsole_ScrollUp
|
||||
|
||||
mov ecx, 497
|
||||
call TConsole_Prout
|
||||
|
||||
inc [esp + loc47.bIGotIt]
|
||||
|
||||
.L130:
|
||||
call TConsole_ScrollUp
|
||||
mov ecx, 498
|
||||
call TConsole_Prout
|
||||
call TGame_Score
|
||||
|
||||
cmp [esp + loc47.bIGotIt], 0
|
||||
je .done
|
||||
|
||||
call TApp_PlaqueProcessor
|
||||
jmp .done
|
||||
|
||||
.L200:
|
||||
mov ecx, 499
|
||||
call TConsole_Prout
|
||||
mov ecx, 500
|
||||
call TConsole_Prout
|
||||
call TConsole_ScrollUp
|
||||
|
||||
mov ecx, 501
|
||||
call TConsole_Prout
|
||||
mov ecx, 502
|
||||
call TConsole_Prout
|
||||
|
||||
mcLoadLocal esi, loc47.pTrekData
|
||||
movzx eax, [esi + TREKDATA.REMKL]
|
||||
movzx edx, [esi + TREKDATA.INKLING]
|
||||
imul eax, 3
|
||||
cmp eax, edx
|
||||
ja .L210
|
||||
|
||||
mov ecx, 503
|
||||
call TConsole_Prout
|
||||
|
||||
mcLoadLocal esi, loc47.pTrekData
|
||||
mov [esi + TREKDATA.ALIVE], 0
|
||||
|
||||
.score_and_return:
|
||||
call TGame_Score
|
||||
jmp .done
|
||||
|
||||
.L210:
|
||||
mov ecx, 504
|
||||
call TConsole_Prout
|
||||
call TConsole_ScrollUp
|
||||
mov ecx, 498
|
||||
call TConsole_Prout
|
||||
jmp .score_and_return
|
||||
|
||||
.L300:
|
||||
mov ecx, 505
|
||||
call TConsole_Prout
|
||||
mov ecx, 506
|
||||
call TConsole_Prout
|
||||
|
||||
.L310:
|
||||
call TConsole_ScrollUp
|
||||
mov ecx, 507
|
||||
call TConsole_Prout
|
||||
jmp .L5000
|
||||
|
||||
.L400:
|
||||
mov ecx, 508
|
||||
call TConsole_Prout
|
||||
jmp .L310
|
||||
|
||||
.L500:
|
||||
mov ecx, 509
|
||||
call TConsole_Cram
|
||||
call TConsole_CramShip
|
||||
mov ecx, 510
|
||||
call TConsole_Prout
|
||||
|
||||
call TConsole_ScrollUp
|
||||
mov ecx, 511
|
||||
call TConsole_Prout
|
||||
jmp .L5000
|
||||
|
||||
.L600:
|
||||
mov ecx, 512
|
||||
call TConsole_Prout
|
||||
mov ecx, 513
|
||||
call TConsole_Prout
|
||||
call TConsole_ScrollUp
|
||||
mov ecx, 514
|
||||
call TConsole_Prout
|
||||
jmp .score_and_return
|
||||
|
||||
.L700:
|
||||
mov ecx, 515
|
||||
call TConsole_Prout
|
||||
|
||||
.L705:
|
||||
mov ecx, 516
|
||||
call TConsole_Prout
|
||||
jmp .L5000
|
||||
|
||||
.L800:
|
||||
mov ecx, 509
|
||||
call TConsole_Cram
|
||||
call TConsole_CramShip
|
||||
mov ecx, 517
|
||||
call TConsole_Prout
|
||||
mov ecx, 518
|
||||
call TConsole_Prout
|
||||
jmp .L5000
|
||||
|
||||
.L900:
|
||||
mov ecx, 519
|
||||
call TConsole_Prout
|
||||
mov ecx, 520
|
||||
call TConsole_Prout
|
||||
mov ecx, 521
|
||||
call TConsole_Prout
|
||||
mov ecx, 522
|
||||
call TConsole_Prout
|
||||
jmp .L5000
|
||||
|
||||
.L1000:
|
||||
mov ecx, 523
|
||||
call TConsole_Prout
|
||||
jmp .L5000
|
||||
|
||||
.L1100:
|
||||
mov ecx, 524
|
||||
call TConsole_Prout
|
||||
mov ecx, 525
|
||||
call TConsole_Prout
|
||||
jmp .L5000
|
||||
|
||||
.L1300:
|
||||
mov ecx, 526
|
||||
call TConsole_Prout
|
||||
mov ecx, 527
|
||||
call TConsole_Prout
|
||||
jmp .L1410
|
||||
|
||||
.L1400:
|
||||
mcLoadLocal esi, loc47.pTrekData
|
||||
movzx ecx, [esi + TREKDATA.IPLANET]
|
||||
call TArray_PlanetPtr
|
||||
mov al, [edi + TPlanet.planet_CLASS]
|
||||
mcOnRegNotEqu al, 1, .L1401
|
||||
|
||||
mov ecx, 528
|
||||
call TConsole_Prout
|
||||
mov ecx, 529
|
||||
call TConsole_Prout
|
||||
call TConsole_ScrollUp
|
||||
mov ecx, 530
|
||||
call TConsole_Prout
|
||||
jmp .L1410
|
||||
|
||||
.L1401:
|
||||
push eax
|
||||
mov ecx, 531
|
||||
call TConsole_Prout
|
||||
mov ecx, 532
|
||||
call TConsole_Cram
|
||||
pop eax
|
||||
add al, 'L'
|
||||
call TConsole_PutChar
|
||||
mov ecx, 533
|
||||
call TConsole_Prout
|
||||
mov ecx, 534
|
||||
call TConsole_Prout
|
||||
mov ecx, 535
|
||||
call TConsole_Prout
|
||||
|
||||
.L1410:
|
||||
call TConsole_ScrollUp
|
||||
mov ecx, 536
|
||||
call TConsole_Prout
|
||||
call TConsole_CramShip
|
||||
mov ecx, 537
|
||||
call TConsole_Prout
|
||||
jmp .L5000
|
||||
|
||||
.L1500:
|
||||
mov ecx, 538
|
||||
call TConsole_Prout
|
||||
jmp .L705
|
||||
|
||||
.L1600:
|
||||
mov ecx, 539
|
||||
call TConsole_Prout
|
||||
call TConsole_ScrollUp
|
||||
|
||||
mov ecx, 540
|
||||
call TConsole_Cram
|
||||
call TConsole_CramShip
|
||||
call TConsole_ScrollUp
|
||||
|
||||
mov ecx, 541
|
||||
call TConsole_Prout
|
||||
jmp .L5000
|
||||
|
||||
.L1700:
|
||||
mov ecx, 542
|
||||
call TConsole_Prout
|
||||
jmp .L1600
|
||||
|
||||
.L1800:
|
||||
mov ecx, 543
|
||||
call TConsole_Prout
|
||||
mov ecx, 544
|
||||
call TConsole_Prout
|
||||
call TConsole_ScrollUp
|
||||
mov ecx, 545
|
||||
call TConsole_Prout
|
||||
jmp .L1410
|
||||
|
||||
.L2100:
|
||||
mov ecx, 546
|
||||
call TConsole_Prout
|
||||
mov ecx, 547
|
||||
call TConsole_Prout
|
||||
jmp .L5000
|
||||
|
||||
.L2200:
|
||||
mov ecx, 548
|
||||
call TConsole_Prout
|
||||
mov ecx, 549
|
||||
call TConsole_Prout
|
||||
jmp .L705
|
||||
|
||||
.L5000:
|
||||
call TConsole_ScrollUp
|
||||
mcLoadLocal esi, loc47.pTrekData
|
||||
mov [esi + TREKDATA.ALIVE], 0
|
||||
|
||||
mcZeroBits edx
|
||||
mcZeroBits eax
|
||||
mov al, CHAR_FQUEENE
|
||||
cmp [esi + TREKDATA.SHIP], CHAR_ENTERPRISE
|
||||
cmove edx, eax
|
||||
mov [esi + TREKDATA.SHIP], dl
|
||||
|
||||
cmp [esi + TREKDATA.REMKL], 0
|
||||
je .L5050
|
||||
|
||||
fld [esi + TREKDATA.REMRES]
|
||||
fld [esi + TREKDATA.INRESOR]
|
||||
fdivp
|
||||
fstp [esp + loc47.dbl_Goodies]
|
||||
|
||||
mov al, [esi + TREKDATA.REMCOM]
|
||||
add al, al
|
||||
add al, [esi + TREKDATA.REMKL]
|
||||
call TCommon_LoadByteIntoFPU
|
||||
|
||||
mov al, [esi + TREKDATA.INCOM]
|
||||
add al, al
|
||||
add al, [esi + TREKDATA.INKLING]
|
||||
call TCommon_LoadByteIntoFPU
|
||||
|
||||
fdivp
|
||||
fstp [esp + loc47.dbl_Baddies]
|
||||
|
||||
fld [esp + loc47.dbl_Goodies]
|
||||
fld [esp + loc47.dbl_Baddies]
|
||||
fdivp
|
||||
fstp [esp + loc47.dbl_Advantage]
|
||||
|
||||
call TRandom_Ranf
|
||||
fld [glb_dbl_0dot5]
|
||||
fmulp
|
||||
fld1
|
||||
faddp
|
||||
fld [esp + loc47.dbl_Advantage]
|
||||
mc_CMP_ST0_ST1
|
||||
jc .L5020
|
||||
|
||||
mov ecx, 550
|
||||
call TConsole_Prout
|
||||
mov ecx, 551
|
||||
call TConsole_Prout
|
||||
|
||||
call TRandom_Ranf
|
||||
fld [glb_dbl_3]
|
||||
faddp
|
||||
fld [esp + loc47.dbl_Advantage]
|
||||
mc_CMP_ST0_ST1
|
||||
jc .L5010
|
||||
|
||||
mov ecx, 552
|
||||
call TConsole_Prout
|
||||
call TConsole_ScrollUp
|
||||
mov ecx, 555
|
||||
call TConsole_Prout
|
||||
jmp .L5030
|
||||
|
||||
.L5010:
|
||||
mov ecx, 553
|
||||
call TConsole_Prout
|
||||
jmp .L5030
|
||||
|
||||
.L5020:
|
||||
mov ecx, 554
|
||||
call TConsole_Prout
|
||||
jmp .L5030
|
||||
|
||||
.L5050:
|
||||
mov ecx, 556
|
||||
call TConsole_Prout
|
||||
mov ecx, 557
|
||||
call TConsole_Prout
|
||||
mov ecx, 558
|
||||
call TConsole_Prout
|
||||
mov ecx, 559
|
||||
call TConsole_Prout
|
||||
|
||||
mcLoadLocal ebx, loc47.pTrekData
|
||||
mov [ebx + TREKDATA.GAMEWON], 1
|
||||
mov [ebx + TREKDATA.ALIVE], 0
|
||||
|
||||
.L5030:
|
||||
call TGame_Score
|
||||
|
||||
.done:
|
||||
mcEndLocals loc47.size
|
||||
ret
|
||||
|
||||
; --- EOF ---
|
@ -1,155 +0,0 @@
|
||||
; --------------------------------------------------------------------------
|
||||
; FILE: TFormat.Asm
|
||||
; DATE: October 7, 2008
|
||||
; --------------------------------------------------------------------------
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Input:
|
||||
; EDI = ANSI buffer
|
||||
; EAX = value to format
|
||||
; Output:
|
||||
; ECX = length of text
|
||||
; NOTE:
|
||||
; All registers are safe
|
||||
; --------------------------------------------------------------------------
|
||||
virtual at 0
|
||||
loc18:
|
||||
.buffer CHARS 12
|
||||
.nChars INT32 ?
|
||||
.bSigned BOOL ?
|
||||
.size = $
|
||||
end virtual
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TFormat_Int32:
|
||||
push edx eax esi edi
|
||||
mcBeginLocals loc18.size
|
||||
|
||||
mcLoadLocalRef esi, loc18.nChars
|
||||
mcLoad8bitsToReg32 ecx, 10
|
||||
mcZeroBits edx
|
||||
mcStoreLocal loc18.nChars, edx
|
||||
mcStoreLocal loc18.bSigned, edx
|
||||
|
||||
add eax, edx
|
||||
jns .div_10
|
||||
|
||||
neg eax
|
||||
inc [esp + loc18.bSigned]
|
||||
|
||||
.div_10:
|
||||
mcZeroBits edx
|
||||
div ecx
|
||||
add dl, '0'
|
||||
dec esi
|
||||
mov [esi], dl
|
||||
inc [esp + loc18.nChars]
|
||||
mcOnRegNotZero eax, .div_10
|
||||
|
||||
cmp [esp + loc18.bSigned], 0
|
||||
je .copy
|
||||
|
||||
dec esi
|
||||
mov byte [esi], '-'
|
||||
inc [esp + loc18.nChars]
|
||||
|
||||
.copy:
|
||||
mcLoadLocal ecx, loc18.nChars
|
||||
push ecx
|
||||
rep movsb
|
||||
|
||||
stosb
|
||||
pop ecx
|
||||
|
||||
mcEndLocals loc18.size
|
||||
pop edi esi eax edx
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Input:
|
||||
; ST(0) = value to format
|
||||
; EDI = ANSI buffer
|
||||
; CL = number of digits after dot
|
||||
; Output:
|
||||
; ECX = length of text
|
||||
; --------------------------------------------------------------------------
|
||||
virtual at 0
|
||||
loc17:
|
||||
.dbl_Value DOUBLE ?
|
||||
.buf_AllDigits CHARS 10
|
||||
.nValue INT32 ?
|
||||
.nDigits INT32 ?
|
||||
.pszBuffer PCHAR ?
|
||||
.bSigned BOOL ?
|
||||
.size = $
|
||||
end virtual
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TFormat_Double:
|
||||
push eax ebx esi edi
|
||||
mcBeginLocals loc17.size
|
||||
|
||||
.prepare:
|
||||
mcStoreLocal loc17.pszBuffer, edi
|
||||
movzx ecx, cl
|
||||
mcStoreLocal loc17.nDigits, ecx
|
||||
|
||||
fld1
|
||||
|
||||
.make_factor:
|
||||
fld [glb_dbl_Ten]
|
||||
fmulp
|
||||
loop .make_factor
|
||||
|
||||
fmulp
|
||||
frndint
|
||||
|
||||
call TCommon_FP_Truncate
|
||||
mcStoreLocal loc17.nValue, eax
|
||||
|
||||
mcLoadLocalRef edi, loc17.buf_AllDigits
|
||||
call TFormat_Int32
|
||||
|
||||
cmp ecx, [esp + loc17.nDigits]
|
||||
ja .print_all
|
||||
|
||||
mcLoadLocal ebx, loc17.pszBuffer
|
||||
mov byte [ebx], '0'
|
||||
mov byte [ebx + 1], '.'
|
||||
je .copy_all_at_EBX
|
||||
|
||||
mov al, [edi]
|
||||
mov byte [ebx + 2], '0'
|
||||
mov byte [ebx + 3], al
|
||||
mov byte [ebx + 4], 0
|
||||
jmp .done
|
||||
|
||||
.copy_all_at_EBX:
|
||||
mov esi, edi
|
||||
lea edi, [ebx + 2]
|
||||
inc ecx
|
||||
rep movsb
|
||||
jmp .done
|
||||
|
||||
.print_all:
|
||||
mov esi, edi
|
||||
mcLoadLocal edi, loc17.pszBuffer
|
||||
sub ecx, [esp + loc17.nDigits]
|
||||
rep movsb
|
||||
|
||||
mov al, '.'
|
||||
stosb
|
||||
|
||||
mov ecx, [esp + loc17.nDigits]
|
||||
inc ecx
|
||||
rep movsb
|
||||
|
||||
.done:
|
||||
mcLoadLocal esi, loc17.pszBuffer
|
||||
call TCmdBuf_AnsiStrLen
|
||||
|
||||
mcEndLocals loc17.size
|
||||
pop edi esi ebx eax
|
||||
ret
|
||||
|
||||
; --- EOF ---
|
File diff suppressed because it is too large
Load Diff
@ -1,158 +0,0 @@
|
||||
; --------------------------------------------------------------------------
|
||||
; FILE: TImpulse.Asm
|
||||
; DATE: November 9, 2008
|
||||
; --------------------------------------------------------------------------
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; IMPULSE
|
||||
; --------------------------------------------------------------------------
|
||||
virtual at 0
|
||||
loc50:
|
||||
.pTrekData PVOID ?
|
||||
.dbl_POWER DOUBLE ?
|
||||
.__padded__ BYTES 2
|
||||
.size = $
|
||||
end virtual
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TImpulse_Main:
|
||||
mcBeginLocals loc50.size
|
||||
|
||||
mcLoadGameDataPtr esi
|
||||
mcStoreLocal loc50.pTrekData, esi
|
||||
|
||||
mov [esi + TREKDATA.IDIDIT], 0
|
||||
|
||||
mov cl, DEV_IMPULSE_ENGINES
|
||||
call TArray_IsDamaged
|
||||
jc .L40
|
||||
|
||||
fld [glb_dbl_30]
|
||||
fld [esi + TREKDATA.ENERGY]
|
||||
mc_CMP_ST0_ST1
|
||||
jc .L5
|
||||
jz .L5
|
||||
|
||||
call TMove_GetCourseDistance
|
||||
|
||||
mcLoadLocal esi, loc50.pTrekData
|
||||
fldz
|
||||
fld [esi + TREKDATA.DIREC]
|
||||
mc_CMP_ST0_ST1
|
||||
jc .done
|
||||
|
||||
fld [esi + TREKDATA.DIST]
|
||||
fld [glb_dbl_100]
|
||||
fmulp
|
||||
fld [glb_dbl_20]
|
||||
faddp
|
||||
fstp [esp + loc50.dbl_POWER]
|
||||
|
||||
fld [esi + TREKDATA.ENERGY]
|
||||
fld [esp + loc50.dbl_POWER]
|
||||
mc_CMP_ST0_ST1
|
||||
jc .L20
|
||||
|
||||
.L5:
|
||||
call TConsole_ScrollUp
|
||||
call TConsole_SetCrewMsgAttr
|
||||
mov ecx, 576
|
||||
call TConsole_Prout
|
||||
mov ecx, 577
|
||||
call TConsole_Prout
|
||||
|
||||
mcLoadLocal esi, loc50.pTrekData
|
||||
fld [glb_dbl_30]
|
||||
fld [esi + TREKDATA.ENERGY]
|
||||
mc_CMP_ST0_ST1
|
||||
jnc .L10
|
||||
|
||||
mov ecx, 578
|
||||
call TConsole_Prout
|
||||
jmp .done
|
||||
|
||||
.L10:
|
||||
mov ecx, 579
|
||||
call TConsole_Prout
|
||||
|
||||
mcLoadLocal esi, loc50.pTrekData
|
||||
fld [esi + TREKDATA.ENERGY]
|
||||
fld [glb_dbl_20]
|
||||
fsubp
|
||||
fld [glb_dbl_0dot01]
|
||||
fmulp
|
||||
fld [glb_dbl_0dot05]
|
||||
fsubp
|
||||
|
||||
mov cl, 1
|
||||
call TConsole_CramFloat
|
||||
|
||||
mov ecx, 580
|
||||
call TConsole_Prout
|
||||
jmp .done
|
||||
|
||||
.L20:
|
||||
mcLoadLocal esi, loc50.pTrekData
|
||||
fld [esi + TREKDATA.DIST]
|
||||
fld [glb_dbl_0dot095]
|
||||
fdivp
|
||||
fstp [esi + TREKDATA.TIME]
|
||||
|
||||
fld [esi + TREKDATA.REMTIME]
|
||||
fld [esi + TREKDATA.TIME]
|
||||
mc_CMP_ST0_ST1
|
||||
jc .L30
|
||||
|
||||
call TConsole_SetCrewMsgAttr
|
||||
mov ecx, 581
|
||||
call TConsole_Prout
|
||||
mov ecx, 582
|
||||
call TConsole_Prout
|
||||
mov ecx, 583
|
||||
call TConsole_Prout
|
||||
|
||||
mcLoad8bitsToReg32 ecx, 158
|
||||
call TGame_JA
|
||||
jnc .done
|
||||
|
||||
.L30:
|
||||
call TMove_Move
|
||||
mcLoadLocal esi, loc50.pTrekData
|
||||
inc [esi + TREKDATA.IDIDIT]
|
||||
|
||||
cmp [esi + TREKDATA.ALLDONE], 0
|
||||
jne .done
|
||||
|
||||
fld [esi + TREKDATA.DIST]
|
||||
fld [glb_dbl_100]
|
||||
fmulp
|
||||
fld [glb_dbl_20]
|
||||
faddp
|
||||
fld [esi + TREKDATA.ENERGY]
|
||||
fsubrp
|
||||
fstp [esi + TREKDATA.ENERGY]
|
||||
|
||||
fld [esi + TREKDATA.DIST]
|
||||
fld [glb_dbl_0dot095]
|
||||
fdivp
|
||||
fstp [esi + TREKDATA.TIME]
|
||||
|
||||
fld [esi + TREKDATA.ENERGY]
|
||||
fldz
|
||||
mc_CMP_ST0_ST1
|
||||
jc .done
|
||||
|
||||
mov al, 4
|
||||
call TFinish_Main
|
||||
jmp .done
|
||||
|
||||
.L40:
|
||||
call TConsole_ScrollUp
|
||||
mov ecx, 584
|
||||
call TConsole_ProutGameMsg
|
||||
|
||||
.done:
|
||||
mcEndLocals loc50.size
|
||||
ret
|
||||
|
||||
; --- EOF ---
|
@ -1,143 +0,0 @@
|
||||
; --------------------------------------------------------------------------
|
||||
; FILE: TLog.Asm
|
||||
; DATE: February 21, 2009
|
||||
; --------------------------------------------------------------------------
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TLog_Create:
|
||||
invoke HeapAlloc, [glb_Allocator], HEAP_NO_SERIALIZE, TLog.size
|
||||
mov [glb_pLog], eax
|
||||
|
||||
mov edi, eax
|
||||
mcZeroBits eax
|
||||
|
||||
mov [edi + TLog.nRemainChars], eax
|
||||
mov [edi + TLog.nStoredChars], eax
|
||||
mov [edi + TLog.pCurrentBufPos], eax
|
||||
|
||||
invoke VirtualAlloc, 0, MAX_LOG_ROOM, MEM_COMMIT or MEM_RESERVE, PAGE_READWRITE
|
||||
mov [edi + TLog.pBuffer], eax
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TLog_Enable:
|
||||
invoke CreateFile, str_LogFileName, GENERIC_WRITE, \
|
||||
0, 0, CREATE_ALWAYS, FILE_FLAG_SEQ_SCAN, 0
|
||||
|
||||
invoke CloseHandle, eax
|
||||
|
||||
mov edi, [glb_pLog]
|
||||
mcZeroBits eax
|
||||
mov edx, MAX_LOG_ROOM
|
||||
mov ebx, [edi + TLog.pBuffer]
|
||||
|
||||
mov [edi + TLog.nRemainChars], edx
|
||||
mov [edi + TLog.nStoredChars], eax
|
||||
mov [edi + TLog.pCurrentBufPos], ebx
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TLog_Backspace:
|
||||
cmp [glb_LogEnabled], 1
|
||||
je .do_it
|
||||
ret
|
||||
|
||||
.do_it:
|
||||
mov esi, [glb_pLog]
|
||||
cmp [esi + TLog.nStoredChars], 0
|
||||
je .print_backspace
|
||||
|
||||
dec [esi + TLog.nStoredChars]
|
||||
dec [esi + TLog.pCurrentBufPos]
|
||||
inc [esi + TLog.nRemainChars]
|
||||
ret
|
||||
|
||||
.print_backspace:
|
||||
mov al, '\'
|
||||
call TLog_DumpChar
|
||||
mov al, 'B'
|
||||
call TLog_DumpChar
|
||||
mov al, 'S'
|
||||
call TLog_DumpChar
|
||||
mov al, 'P'
|
||||
call TLog_DumpChar
|
||||
mov al, '\'
|
||||
call TLog_DumpChar
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TLog_Disable:
|
||||
cmp [glb_LogEnabled], 1
|
||||
je .do_it
|
||||
ret
|
||||
|
||||
.do_it:
|
||||
call TLog_Flush
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TLog_Flush:
|
||||
mov esi, [glb_pLog]
|
||||
mov ecx, [esi + TLog.nStoredChars]
|
||||
jecxz .done
|
||||
|
||||
invoke CreateFile, str_LogFileName, GENERIC_WRITE, \
|
||||
0, 0, OPEN_EXISTING, FILE_FLAG_SEQ_SCAN, 0
|
||||
|
||||
mov ebx, eax
|
||||
invoke SetFilePointer, eax, 0, 0, 2
|
||||
|
||||
invoke WriteFile, ebx, [esi + TLog.pBuffer], [esi + TLog.nStoredChars], glb_FPU_Int32, 0
|
||||
invoke CloseHandle, ebx
|
||||
|
||||
mcZeroBits eax
|
||||
mov edx, MAX_LOG_ROOM
|
||||
mov ebx, [esi + TLog.pBuffer]
|
||||
|
||||
mov [esi + TLog.nRemainChars], edx
|
||||
mov [esi + TLog.nStoredChars], eax
|
||||
mov [esi + TLog.pCurrentBufPos], ebx
|
||||
|
||||
.done:
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Input:
|
||||
; AL = character to append into log buffer.
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TLog_DumpChar:
|
||||
cmp [glb_LogEnabled], 1
|
||||
je .do_it
|
||||
ret
|
||||
|
||||
.do_it:
|
||||
mcOnRegZero al, .do_backspace
|
||||
|
||||
mov esi, [glb_pLog]
|
||||
cmp [esi + TLog.nRemainChars], 0
|
||||
jne .dump
|
||||
|
||||
push eax
|
||||
call TLog_Flush
|
||||
pop eax
|
||||
mov esi, [glb_pLog]
|
||||
|
||||
.dump:
|
||||
mov edi, [esi + TLog.pCurrentBufPos]
|
||||
stosb
|
||||
mov [esi + TLog.pCurrentBufPos], edi
|
||||
inc [esi + TLog.nStoredChars]
|
||||
dec [esi + TLog.nRemainChars]
|
||||
ret
|
||||
|
||||
.do_backspace:
|
||||
call TLog_Backspace
|
||||
ret
|
||||
|
||||
; --- EOF ---
|
@ -1,28 +0,0 @@
|
||||
; --------------------------------------------------------------------------
|
||||
; FILE: TLog.Inc
|
||||
; DATE: February 21, 2009
|
||||
; --------------------------------------------------------------------------
|
||||
|
||||
MAX_LOG_ROOM = 40000h
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
PLAQUE_INSERT_KLRATE = 0F8h
|
||||
PLAQUE_INSERT_SCORE = 0F9h
|
||||
PLAQUE_INSERT_DATE = 0FAh
|
||||
PLAQUE_INSERT_LEVEL = 0FBh
|
||||
PLAQUE_INSERT_NAME = 0FCh
|
||||
PLAQUE_STRING = 0FDh
|
||||
PLAQUE_END_OF_LINE = 0FEh
|
||||
PLAQUE_END_OF_ALL = 0FFh
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
virtual at 0
|
||||
TLog:
|
||||
.pBuffer PCHAR ?
|
||||
.pCurrentBufPos PCHAR ?
|
||||
.nStoredChars COUNT ?
|
||||
.nRemainChars COUNT ?
|
||||
.size = $
|
||||
end virtual
|
||||
|
||||
; --- EOF ---
|
@ -1,184 +0,0 @@
|
||||
; --------------------------------------------------------------------------
|
||||
; FILE: TLrScan.Asm
|
||||
; DATE: October 11, 2008
|
||||
; --------------------------------------------------------------------------
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Enable/Disable log file
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TLrScan_Log:
|
||||
call TCmdBuf_Scan
|
||||
|
||||
cmp [ebx + TCmdBuf.cmdbuf_KEY], CMD_TOKEN_ALPHA
|
||||
je .check_yes_no
|
||||
|
||||
cmp [ebx + TCmdBuf.cmdbuf_KEY], CMD_TOKEN_EOL
|
||||
je .print_log_state
|
||||
|
||||
.print_log_format:
|
||||
mov ecx, 712
|
||||
|
||||
.print:
|
||||
call TConsole_ProutGameMsg
|
||||
ret
|
||||
|
||||
.check_yes_no:
|
||||
mcLoad8bitsToReg32 ecx, 159
|
||||
call TCmdBuf_Crop
|
||||
jc .yes
|
||||
|
||||
mcLoad8bitsToReg32 ecx, 122
|
||||
call TCmdBuf_Crop
|
||||
jnc .print_log_format
|
||||
;
|
||||
; Switch logging OFF
|
||||
;
|
||||
cmp [glb_LogEnabled], 0
|
||||
je .msg710
|
||||
|
||||
call TLog_Disable
|
||||
mov [glb_LogEnabled], 0
|
||||
|
||||
.msg710:
|
||||
mov ecx, 710
|
||||
jmp .print
|
||||
|
||||
.yes:
|
||||
;
|
||||
; Switch logging ON
|
||||
;
|
||||
cmp [glb_LogEnabled], 1
|
||||
je .msg711
|
||||
|
||||
mov [glb_LogEnabled], 1
|
||||
call TLog_Enable
|
||||
|
||||
.msg711:
|
||||
mov ecx, 711
|
||||
jmp .print
|
||||
|
||||
.print_log_state:
|
||||
movzx ecx, [glb_LogEnabled]
|
||||
add ecx, 710
|
||||
jmp .print
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Input:
|
||||
; EAX = X quadrant coordinate (may be out of range)
|
||||
; EDX = Y quadrant coordinate (may be out of range)
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TLrScan_DumpContents:
|
||||
push eax edx
|
||||
|
||||
cmp eax, 1
|
||||
jb .out_of_range
|
||||
cmp edx, 1
|
||||
jb .out_of_range
|
||||
cmp eax, 8
|
||||
ja .out_of_range
|
||||
cmp edx, 8
|
||||
ja .out_of_range
|
||||
|
||||
mcLoad1 ecx
|
||||
call TArray_SetStarChartValue
|
||||
|
||||
mov cl, ATTR_REPORT_VALUE
|
||||
call TConsole_SetAttr
|
||||
|
||||
call TArray_GetGalaxyValue
|
||||
mov eax, ecx
|
||||
mov cl, 5
|
||||
call TConsole_CramIntWidth
|
||||
jmp .done
|
||||
|
||||
.out_of_range:
|
||||
mov cl, ATTR_GALAXY_EDGE
|
||||
call TConsole_SetAttr
|
||||
mcLoad8bitsToReg32 ecx, 134
|
||||
call TConsole_Cram
|
||||
|
||||
.done:
|
||||
pop edx eax
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; LRSCAN
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TLrScan_Main:
|
||||
mov cl, DEV_LR_SENSORS
|
||||
call TArray_IsDamaged
|
||||
jnc .proceed
|
||||
|
||||
mcLoadGameDataPtr esi
|
||||
cmp [esi + TREKDATA.CONDIT], CONDITION_DOCKED
|
||||
jne .not_available
|
||||
|
||||
.proceed:
|
||||
call TConsole_ScrollUp
|
||||
mov cl, ATTR_REPORT_TEXT
|
||||
call TConsole_SetAttr
|
||||
mcLoad8bitsToReg32 ecx, 135
|
||||
call TConsole_Cram
|
||||
mov cl, 1
|
||||
mcLoadGameDataPtr ebx
|
||||
mov al, [ebx + TREKDATA.QUADX]
|
||||
mov dl, [ebx + TREKDATA.QUADY]
|
||||
call TConsole_CramLoc
|
||||
call TConsole_ScrollUp
|
||||
call TConsole_ScrollUp
|
||||
;
|
||||
; EAX = QUADX-1
|
||||
; EDX = QUADY-1
|
||||
;
|
||||
mcLoadGameDataPtr ebx
|
||||
movzx eax, [ebx + TREKDATA.QUADX]
|
||||
movzx edx, [ebx + TREKDATA.QUADY]
|
||||
dec eax
|
||||
dec edx
|
||||
|
||||
call TLrScan_DumpContents
|
||||
inc edx
|
||||
call TLrScan_DumpContents
|
||||
inc edx
|
||||
call TLrScan_DumpContents
|
||||
|
||||
push edx eax
|
||||
call TConsole_ScrollUp
|
||||
pop eax edx
|
||||
|
||||
inc eax
|
||||
sub edx, 2
|
||||
call TLrScan_DumpContents
|
||||
inc edx
|
||||
call TLrScan_DumpContents
|
||||
inc edx
|
||||
call TLrScan_DumpContents
|
||||
|
||||
push edx eax
|
||||
call TConsole_ScrollUp
|
||||
pop eax edx
|
||||
|
||||
inc eax
|
||||
sub edx, 2
|
||||
call TLrScan_DumpContents
|
||||
inc edx
|
||||
call TLrScan_DumpContents
|
||||
inc edx
|
||||
call TLrScan_DumpContents
|
||||
call TConsole_ScrollUp
|
||||
jmp .done
|
||||
|
||||
.not_available:
|
||||
call TConsole_ScrollUp
|
||||
call TConsole_SetGameMsgAttr
|
||||
mcLoad8bitsToReg32 ecx, 133
|
||||
call TConsole_Prout
|
||||
|
||||
.done:
|
||||
call TConsole_ScrollUp
|
||||
ret
|
||||
|
||||
; --- EOF ---
|
File diff suppressed because it is too large
Load Diff
@ -1,191 +0,0 @@
|
||||
; --------------------------------------------------------------------------
|
||||
; FILE: TMsgTable.Asm
|
||||
; DATE: September 28, 2008
|
||||
; --------------------------------------------------------------------------
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TMsgTable_CountItems:
|
||||
mov esi, [glb_pRawMsgBuffer]
|
||||
mcZeroBits eax
|
||||
mcZeroBits ecx
|
||||
mcZeroBits edx
|
||||
|
||||
.load_char:
|
||||
lodsb
|
||||
mcOnRegZero eax, .done
|
||||
|
||||
cmp al, 0Dh
|
||||
sete dl
|
||||
add ecx, edx
|
||||
jmp .load_char
|
||||
|
||||
.done:
|
||||
mov [glb_NumMsgItems], ecx
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TMsgTable_Parse:
|
||||
mov ecx, [glb_NumMsgItems]
|
||||
shl ecx, 2
|
||||
invoke HeapAlloc, [glb_Allocator], HEAP_NO_SERIALIZE, ecx
|
||||
mov [glb_pMsgItems], eax
|
||||
|
||||
mov edi, eax
|
||||
mov esi, [glb_pRawMsgBuffer]
|
||||
mcZeroBits eax
|
||||
mov [glb_NumMsgItems], eax
|
||||
|
||||
.load_char:
|
||||
lodsb
|
||||
mcOnRegZero eax, .done
|
||||
|
||||
mcOnRegEqu al, '{', .begin_item
|
||||
mcOnRegEqu al, '}', .end_item
|
||||
jmp .load_char
|
||||
|
||||
.begin_item:
|
||||
mov [edi], esi
|
||||
add edi, 4
|
||||
inc [glb_NumMsgItems]
|
||||
jmp .load_char
|
||||
|
||||
.end_item:
|
||||
lea edx, [esi - 1]
|
||||
mov byte [edx], 0
|
||||
jmp .load_char
|
||||
|
||||
.done:
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Input:
|
||||
; EDI = buffer address
|
||||
; ECX = buffer size in bytes
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TMsgTable_Decrypt:
|
||||
pushad
|
||||
|
||||
.reset_key:
|
||||
mov esi, TMsgTable_GetItem
|
||||
mcLoad8bitsToReg32 edx, 27
|
||||
|
||||
.next:
|
||||
lodsb
|
||||
xor [edi], al
|
||||
inc edi
|
||||
|
||||
dec ecx
|
||||
jz .done
|
||||
|
||||
dec edx
|
||||
jz .reset_key
|
||||
jmp .next
|
||||
|
||||
.done:
|
||||
popad
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
virtual at 0
|
||||
loc4:
|
||||
.hFile HFILE ?
|
||||
.dwSize UINT32 ?
|
||||
.dwLoaded UINT32 ?
|
||||
.size = $
|
||||
end virtual
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TMsgTable_Load:
|
||||
mcBeginLocals loc4.size
|
||||
|
||||
invoke CreateFile, str_MsgFileName, GENERIC_READ, \
|
||||
0, 0, OPEN_EXISTING, FILE_FLAG_SEQ_SCAN, 0
|
||||
|
||||
mcStoreLocal loc4.hFile, eax
|
||||
cmp eax, -1
|
||||
je .done
|
||||
|
||||
mov ebx, esp
|
||||
invoke GetFileSize, [ebx + loc4.hFile], 0
|
||||
mcStoreLocal loc4.dwSize, eax
|
||||
mcOnRegZero eax, .close
|
||||
|
||||
inc eax
|
||||
invoke HeapAlloc, [glb_Allocator], HEAP_NO_SERIALIZE, eax
|
||||
mov [glb_pRawMsgBuffer], eax
|
||||
mcOnRegZero eax, .close
|
||||
|
||||
mcLoadMemberRef edi, loc4.dwLoaded
|
||||
|
||||
invoke ReadFile, [ebx + loc4.hFile], eax, \
|
||||
[ebx + loc4.dwSize], edi, 0
|
||||
|
||||
mov edi, [glb_pRawMsgBuffer]
|
||||
mcLoadLocal ecx, loc4.dwLoaded
|
||||
mcZeroBits eax
|
||||
mov [edi + ecx], al
|
||||
|
||||
call TMsgTable_Decrypt
|
||||
call TMsgTable_CountItems
|
||||
call TMsgTable_Parse
|
||||
|
||||
.close:
|
||||
mov ebx, esp
|
||||
invoke CloseHandle, [ebx + loc4.hFile]
|
||||
|
||||
.done:
|
||||
mcEndLocals loc4.size
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Input:
|
||||
; ECX = item index (1-based)
|
||||
; Output:
|
||||
; ESI = points to ANSI text at specified index or empty string
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TMsgTable_GetItem:
|
||||
cmp ecx, [glb_NumMsgItems]
|
||||
ja .empty
|
||||
|
||||
dec ecx
|
||||
push edx
|
||||
mov edx, [glb_pMsgItems]
|
||||
mov esi, [edx + ecx*4]
|
||||
pop edx
|
||||
ret
|
||||
|
||||
.empty:
|
||||
mov esi, str_CharSizeText + 4
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Input:
|
||||
; ECX = item index (1-based)
|
||||
; Output:
|
||||
; EAX = string length
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TMsgTable_GetLength:
|
||||
push esi ecx
|
||||
call TMsgTable_GetItem
|
||||
|
||||
mcZeroBits eax
|
||||
mcZeroBits ecx
|
||||
|
||||
.next_char:
|
||||
lodsb
|
||||
mcOnRegZero eax, .done
|
||||
|
||||
inc ecx
|
||||
jmp .next_char
|
||||
|
||||
.done:
|
||||
mov eax, ecx
|
||||
pop ecx esi
|
||||
ret
|
||||
|
||||
; --- EOF ---
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,324 +0,0 @@
|
||||
; --------------------------------------------------------------------------
|
||||
; FILE: TRandom.Asm
|
||||
; DATE: October 4, 2008
|
||||
; --------------------------------------------------------------------------
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TRandom_Create:
|
||||
invoke HeapAlloc, [glb_Allocator], HEAP_NO_SERIALIZE, TRandom.size
|
||||
mov [glb_pMersenne], eax
|
||||
|
||||
mcZeroBits ecx
|
||||
mov [eax + TRandom.rand_NextIndex], ecx
|
||||
|
||||
rdtsc
|
||||
call TRandom_Seed
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Input:
|
||||
; EAX = seed value
|
||||
; --------------------------------------------------------------------------
|
||||
virtual at 0
|
||||
loc7:
|
||||
.index INDEX ?
|
||||
.size = $
|
||||
end virtual
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TRandom_Seed:
|
||||
mcBeginLocals loc7.size
|
||||
|
||||
mcLoad1 ecx
|
||||
mcStoreLocal loc7.index, ecx
|
||||
|
||||
mov edi, [glb_pMersenne]
|
||||
stosd
|
||||
|
||||
.set_next_value:
|
||||
;
|
||||
; MT [i-1]
|
||||
;
|
||||
mov edx, [edi - 4]
|
||||
;
|
||||
; Right shift by 30 bits
|
||||
;
|
||||
mov eax, edx
|
||||
shr eax, 30
|
||||
;
|
||||
; XOR it with MT [i-1]
|
||||
;
|
||||
xor edx, eax
|
||||
;
|
||||
; Add current index
|
||||
;
|
||||
add edx, [esp + loc7.index]
|
||||
;
|
||||
; Multiply by 6C078965h
|
||||
;
|
||||
mov eax, 6C078965h
|
||||
mul edx
|
||||
;
|
||||
; Store as MT [i]
|
||||
;
|
||||
stosd
|
||||
;
|
||||
; Continue until index reaches 623
|
||||
;
|
||||
inc [esp + loc7.index]
|
||||
cmp [esp + loc7.index], 623
|
||||
jbe .set_next_value
|
||||
|
||||
mcEndLocals loc7.size
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Input:
|
||||
; EAX = value
|
||||
; Output:
|
||||
; EAX = value MOD 624
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TRandom_GetModulo624:
|
||||
push ecx edx
|
||||
mcZeroBits edx
|
||||
mov ecx, 624
|
||||
div ecx
|
||||
mov eax, edx
|
||||
pop edx ecx
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
virtual at 0
|
||||
loc8:
|
||||
.index INDEX ?
|
||||
.y UINT32 ?
|
||||
.size = $
|
||||
end virtual
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TRandom_Generate624:
|
||||
mcBeginLocals loc8.size
|
||||
;
|
||||
; i=0
|
||||
;
|
||||
mcZeroBits eax
|
||||
mcStoreLocal loc8.index, eax
|
||||
;
|
||||
; MT array
|
||||
;
|
||||
mov esi, [glb_pMersenne]
|
||||
|
||||
.calc_y:
|
||||
;
|
||||
; MT [(i+1) MOD 624]
|
||||
;
|
||||
mcLoadLocal eax, loc8.index
|
||||
inc eax
|
||||
call TRandom_GetModulo624
|
||||
mov ecx, [esi + eax*4]
|
||||
;
|
||||
; Get last 31 bits of ECX
|
||||
;
|
||||
and ecx, 7FFFFFFFh
|
||||
;
|
||||
; 32nd bit of MT [i]
|
||||
;
|
||||
mcLoadLocal eax, loc8.index
|
||||
mov edx, [esi + eax*4]
|
||||
and edx, 80000000h
|
||||
;
|
||||
; Combine them and store as Y
|
||||
;
|
||||
or edx, ecx
|
||||
mcStoreLocal loc8.y, edx
|
||||
;
|
||||
; MT [i] = MT [(i+397) MOD 624] xor (y >> 1)
|
||||
;
|
||||
mcLoadLocal eax, loc8.index
|
||||
add eax, 397
|
||||
call TRandom_GetModulo624
|
||||
mov ecx, [esi + eax*4]
|
||||
|
||||
shr edx, 1
|
||||
xor ecx, edx
|
||||
mcLoadLocal eax, loc8.index
|
||||
mov [esi + eax*4], ecx
|
||||
;
|
||||
; IF ((Y MOD 2) == 1) THEN MT [i] ^= 9908B0DFh
|
||||
;
|
||||
test [esp + loc8.y], 1
|
||||
jz .continue
|
||||
|
||||
xor dword [esi + eax*4], 9908B0DFh
|
||||
|
||||
.continue:
|
||||
inc [esp + loc8.index]
|
||||
cmp [esp + loc8.index], 623
|
||||
jbe .calc_y
|
||||
|
||||
mcEndLocals loc8.size
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Output:
|
||||
; EAX = next random value from a sequence
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TRandom_GetNextNumber:
|
||||
push ebx
|
||||
mov ebx, [glb_pMersenne]
|
||||
;
|
||||
; IF (index == 0) THEN generate next 624 values
|
||||
;
|
||||
cmp [ebx + TRandom.rand_NextIndex], 0
|
||||
jne .get_it
|
||||
|
||||
push esi
|
||||
call TRandom_Generate624
|
||||
pop esi
|
||||
mov ebx, [glb_pMersenne]
|
||||
|
||||
.get_it:
|
||||
mcLoadMember ecx, TRandom.rand_NextIndex
|
||||
mov eax, [ebx + ecx*4]
|
||||
|
||||
mov edx, eax
|
||||
shr edx, 11
|
||||
xor eax, edx
|
||||
|
||||
mov edx, eax
|
||||
shl edx, 7
|
||||
and edx, 9D2C5680h
|
||||
xor eax, edx
|
||||
|
||||
mov edx, eax
|
||||
shl edx, 15
|
||||
and edx, 0EFC60000h
|
||||
xor eax, edx
|
||||
|
||||
mov edx, eax
|
||||
shr edx, 18
|
||||
xor eax, edx
|
||||
;
|
||||
; Index = (Index+1) MOD 624
|
||||
;
|
||||
push eax
|
||||
mov eax, ecx
|
||||
call TRandom_GetModulo624
|
||||
mcStoreMember TRandom.rand_NextIndex, eax
|
||||
pop eax
|
||||
pop ebx
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Input:
|
||||
; EDX = N
|
||||
; Output:
|
||||
; EAX = random value in range [0..N-1]
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TRandom_IRan:
|
||||
push edx
|
||||
call TRandom_GetNextNumber
|
||||
mcZeroBits edx
|
||||
pop ecx
|
||||
div ecx
|
||||
mov eax, edx
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Output:
|
||||
; ST(0) = random value in range [0..1]
|
||||
; --------------------------------------------------------------------------
|
||||
virtual at 0
|
||||
loc9:
|
||||
.dbl_2e31 DOUBLE ?
|
||||
.dbl_padded DOUBLE ?
|
||||
.size = $
|
||||
end virtual
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TRandom_Ranf:
|
||||
pushad
|
||||
mcBeginLocals loc9.size
|
||||
|
||||
fldz
|
||||
fstp [esp + loc9.dbl_2e31]
|
||||
|
||||
call TRandom_GetNextNumber
|
||||
test eax, 80000000h
|
||||
jz .add_two_parts
|
||||
|
||||
fld [glb_dbl_2e31]
|
||||
fstp [esp + loc9.dbl_2e31]
|
||||
and eax, 7FFFFFFFh
|
||||
|
||||
.add_two_parts:
|
||||
call TCommon_FPU_Load_EAX
|
||||
fld [esp + loc9.dbl_2e31]
|
||||
faddp
|
||||
|
||||
fld [glb_dbl_2e32]
|
||||
fdivp
|
||||
|
||||
mcEndLocals loc9.size
|
||||
popad
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Output:
|
||||
; EAX = value 1 or 10 (X,Y sector of Tholian!)
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TRandom_TholianSect:
|
||||
call TRandom_Ranf
|
||||
fld [glb_dbl_0dot5]
|
||||
faddp
|
||||
call TCommon_FP_Truncate
|
||||
imul eax, 9
|
||||
inc eax
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Output:
|
||||
; EAX = random X value in range [1..8]
|
||||
; EDX = random Y value in range [1..8]
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TRandom_IRan8:
|
||||
mcLoad8bitsToReg32 edx, 8
|
||||
call TRandom_IRan
|
||||
inc eax
|
||||
push eax
|
||||
|
||||
mcLoad8bitsToReg32 edx, 8
|
||||
call TRandom_IRan
|
||||
inc eax
|
||||
|
||||
mov edx, eax
|
||||
pop eax
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Output:
|
||||
; EAX = random X value in range [1..10]
|
||||
; EDX = random Y value in range [1..10]
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TRandom_IRan10:
|
||||
mcLoad8bitsToReg32 edx, 10
|
||||
call TRandom_IRan
|
||||
inc eax
|
||||
push eax
|
||||
|
||||
mcLoad8bitsToReg32 edx, 10
|
||||
call TRandom_IRan
|
||||
inc eax
|
||||
|
||||
mov edx, eax
|
||||
pop eax
|
||||
ret
|
||||
|
||||
; --- EOF ---
|
@ -1,13 +0,0 @@
|
||||
; --------------------------------------------------------------------------
|
||||
; FILE: TRandom.Inc
|
||||
; DATE: October 4, 2008
|
||||
; --------------------------------------------------------------------------
|
||||
|
||||
virtual at 0
|
||||
TRandom:
|
||||
.rand_NumberSet INTEGERS 624
|
||||
.rand_NextIndex INT32 ?
|
||||
.size = $
|
||||
end virtual
|
||||
|
||||
; --- EOF ---
|
@ -1,314 +0,0 @@
|
||||
; --------------------------------------------------------------------------
|
||||
; FILE: TShields.Asm
|
||||
; DATE: October 18, 2008
|
||||
; --------------------------------------------------------------------------
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; SHIELDS
|
||||
; --------------------------------------------------------------------------
|
||||
virtual at 0
|
||||
loc35:
|
||||
.pTrekData PVOID ?
|
||||
.dbl_ETRANS DOUBLE ?
|
||||
.dbl_reserved DOUBLE ?
|
||||
.size = $
|
||||
end virtual
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TShields_Main:
|
||||
mcBeginLocals loc35.size
|
||||
mcLoadGameDataPtr ebx
|
||||
mcStoreLocal loc35.pTrekData, ebx
|
||||
|
||||
mov [ebx + TREKDATA.IDIDIT], 0
|
||||
call TCmdBuf_Scan
|
||||
|
||||
cmp [ebx + TCmdBuf.cmdbuf_KEY], CMD_TOKEN_EOL
|
||||
jne TShields_Up.L30
|
||||
|
||||
.L15:
|
||||
mcLoad8bitsToReg32 ecx, 225
|
||||
call TGame_JA
|
||||
jc TShields_Up.L8010
|
||||
|
||||
mov cl, DEV_SHIELDS
|
||||
call TArray_IsDamaged
|
||||
jc TShields_Up.L60
|
||||
|
||||
mcLoadLocal esi, loc35.pTrekData
|
||||
cmp [esi + TREKDATA.SHLDUP], 0
|
||||
jne TShields_Up.L20
|
||||
jmp TShields_Up.ENTRY
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; SHLDSUP
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TShields_Up:
|
||||
mcBeginLocals loc35.size
|
||||
mcLoadGameDataPtr ebx
|
||||
mcStoreLocal loc35.pTrekData, ebx
|
||||
|
||||
.ENTRY:
|
||||
mcLoad8bitsToReg32 ecx, 226
|
||||
call TGame_JA
|
||||
jc .L40
|
||||
jmp .L90
|
||||
|
||||
.L20:
|
||||
mcLoad8bitsToReg32 ecx, 227
|
||||
call TGame_JA
|
||||
jc .L50
|
||||
jmp .L90
|
||||
|
||||
.L30:
|
||||
mcLoad8bitsToReg32 ecx, 244
|
||||
call TCmdBuf_Crop
|
||||
jc .L80
|
||||
|
||||
mov cl, DEV_SHIELDS
|
||||
call TArray_IsDamaged
|
||||
jc .L60
|
||||
|
||||
mcLoad8bitsToReg32 ecx, 245
|
||||
call TCmdBuf_Crop
|
||||
jc .L40
|
||||
|
||||
mcLoad8bitsToReg32 ecx, 246
|
||||
call TCmdBuf_Crop
|
||||
jc .L50
|
||||
jmp TShields_Main.L15
|
||||
|
||||
.L40:
|
||||
;
|
||||
; Raising shields
|
||||
;
|
||||
mcLoadLocal esi, loc35.pTrekData
|
||||
cmp [esi + TREKDATA.SHLDUP], 0
|
||||
jne .L45
|
||||
|
||||
mov [esi + TREKDATA.SHLDUP], 1
|
||||
mov [esi + TREKDATA.SHLDCHG], 1
|
||||
|
||||
cmp [esi + TREKDATA.CONDIT], CONDITION_DOCKED
|
||||
je .L401
|
||||
|
||||
fld [esi + TREKDATA.ENERGY]
|
||||
fld [glb_dbl_50]
|
||||
fsubp
|
||||
fstp [esi + TREKDATA.ENERGY]
|
||||
|
||||
.L401:
|
||||
call TConsole_SetGameMsgAttr
|
||||
mcLoad8bitsToReg32 ecx, 228
|
||||
call TConsole_Prout
|
||||
|
||||
mcLoadLocal esi, loc35.pTrekData
|
||||
fldz
|
||||
fld [esi + TREKDATA.ENERGY]
|
||||
mc_CMP_ST0_ST1
|
||||
jc .L70
|
||||
|
||||
.did_it:
|
||||
mcLoadLocal edi, loc35.pTrekData
|
||||
inc [edi + TREKDATA.IDIDIT]
|
||||
jmp .done
|
||||
|
||||
.L45:
|
||||
call TConsole_SetGameMsgAttr
|
||||
mcLoad8bitsToReg32 ecx, 230
|
||||
call TConsole_Prout
|
||||
jmp .done
|
||||
|
||||
.L50:
|
||||
;
|
||||
; Lowering shields
|
||||
;
|
||||
mcLoadLocal esi, loc35.pTrekData
|
||||
cmp [esi + TREKDATA.SHLDUP], 0
|
||||
je .L55
|
||||
|
||||
dec [esi + TREKDATA.SHLDUP]
|
||||
mov [esi + TREKDATA.SHLDCHG], 1
|
||||
|
||||
call TConsole_SetGameMsgAttr
|
||||
mcLoad8bitsToReg32 ecx, 229
|
||||
call TConsole_Prout
|
||||
jmp .did_it
|
||||
|
||||
.L55:
|
||||
call TConsole_SetGameMsgAttr
|
||||
mcLoad8bitsToReg32 ecx, 231
|
||||
call TConsole_Prout
|
||||
jmp .done
|
||||
|
||||
.L60:
|
||||
call TConsole_SetGameMsgAttr
|
||||
mcLoad8bitsToReg32 ecx, 232
|
||||
call TConsole_Prout
|
||||
jmp .done
|
||||
|
||||
.L70:
|
||||
call TConsole_ScrollUp
|
||||
call TConsole_SetGameMsgAttr
|
||||
mcLoad8bitsToReg32 ecx, 233
|
||||
call TConsole_Prout
|
||||
mov al, 4
|
||||
call TFinish_Main
|
||||
jmp .done
|
||||
|
||||
.L80:
|
||||
call TCmdBuf_Scan
|
||||
fld [ebx + TCmdBuf.cmdbuf_FNUM]
|
||||
fstp [esp + loc35.dbl_ETRANS]
|
||||
|
||||
cmp [ebx + TCmdBuf.cmdbuf_KEY], CMD_TOKEN_REAL
|
||||
je .L81
|
||||
|
||||
.L8010:
|
||||
mcLoad8bitsToReg32 ecx, 234
|
||||
call TGame_Prompt
|
||||
jmp .L80
|
||||
|
||||
.L81:
|
||||
fld [esp + loc35.dbl_ETRANS]
|
||||
fldz
|
||||
mc_CMP_ST0_ST1
|
||||
jz .L90
|
||||
|
||||
mcLoadLocal esi, loc35.pTrekData
|
||||
fld [esi + TREKDATA.ENERGY]
|
||||
fld [esp + loc35.dbl_ETRANS]
|
||||
mc_CMP_ST0_ST1
|
||||
jc .L82
|
||||
|
||||
call TConsole_SetGameMsgAttr
|
||||
mcLoad8bitsToReg32 ecx, 235
|
||||
call TConsole_Prout
|
||||
jmp .L90
|
||||
|
||||
.L82:
|
||||
mcLoadLocal edi, loc35.pTrekData
|
||||
inc [edi + TREKDATA.IDIDIT]
|
||||
|
||||
fld [edi + TREKDATA.INSHLD]
|
||||
fld [edi + TREKDATA.SHLD]
|
||||
fld [esp + loc35.dbl_ETRANS]
|
||||
faddp
|
||||
mc_CMP_ST0_ST1
|
||||
jc .L83
|
||||
jz .L83
|
||||
|
||||
call TConsole_SetGameMsgAttr
|
||||
mcLoad8bitsToReg32 ecx, 236
|
||||
call TConsole_Prout
|
||||
mcLoad8bitsToReg32 ecx, 237
|
||||
call TConsole_Prout
|
||||
|
||||
mcLoadLocal esi, loc35.pTrekData
|
||||
fld [esi + TREKDATA.SHLD]
|
||||
fld [esi + TREKDATA.INSHLD]
|
||||
fsubp
|
||||
fld [esi + TREKDATA.ENERGY]
|
||||
faddp
|
||||
fstp [esi + TREKDATA.ENERGY]
|
||||
|
||||
fld [esi + TREKDATA.INSHLD]
|
||||
fstp [esi + TREKDATA.SHLD]
|
||||
jmp .L90
|
||||
|
||||
.L83:
|
||||
fld [esp + loc35.dbl_ETRANS]
|
||||
fldz
|
||||
mc_CMP_ST0_ST1
|
||||
jc .L8310
|
||||
|
||||
mcLoadLocal esi, loc35.pTrekData
|
||||
fld [esi + TREKDATA.INENRG]
|
||||
fld [esi + TREKDATA.ENERGY]
|
||||
fld [esp + loc35.dbl_ETRANS]
|
||||
fsubp
|
||||
mc_CMP_ST0_ST1
|
||||
jc .L8310
|
||||
jz .L8310
|
||||
|
||||
fld [esi + TREKDATA.INENRG]
|
||||
fld [esi + TREKDATA.ENERGY]
|
||||
fld [esi + TREKDATA.SHLD]
|
||||
faddp
|
||||
mc_CMP_ST0_ST1
|
||||
jc .L8310
|
||||
jz .L8310
|
||||
|
||||
call TConsole_SetCrewMsgAttr
|
||||
call TConsole_ScrollUp
|
||||
mcLoad8bitsToReg32 ecx, 148
|
||||
call TConsole_Prout
|
||||
mcLoad8bitsToReg32 ecx, 238
|
||||
call TConsole_Prout
|
||||
mcLoad8bitsToReg32 ecx, 239
|
||||
call TConsole_Prout
|
||||
|
||||
mcLoadLocal edi, loc35.pTrekData
|
||||
dec [edi + TREKDATA.IDIDIT]
|
||||
jmp .L90
|
||||
|
||||
.L8310:
|
||||
mcLoadLocal esi, loc35.pTrekData
|
||||
fld [esi + TREKDATA.SHLD]
|
||||
fld [esp + loc35.dbl_ETRANS]
|
||||
faddp
|
||||
fldz
|
||||
mc_CMP_ST0_ST1
|
||||
jc .L84
|
||||
jz .L84
|
||||
|
||||
call TConsole_SetGameMsgAttr
|
||||
mcLoad8bitsToReg32 ecx, 240
|
||||
call TConsole_Prout
|
||||
|
||||
mcLoadLocal esi, loc35.pTrekData
|
||||
fld [esi + TREKDATA.ENERGY]
|
||||
fld [esi + TREKDATA.SHLD]
|
||||
faddp
|
||||
fstp [esi + TREKDATA.ENERGY]
|
||||
|
||||
fldz
|
||||
fstp [esi + TREKDATA.SHLD]
|
||||
jmp .L90
|
||||
|
||||
.L84:
|
||||
call TConsole_SetCrewMsgAttr
|
||||
mcLoad8bitsToReg32 ecx, 242
|
||||
mcLoad8bitsToReg32 edx, 243
|
||||
fld [esp + loc35.dbl_ETRANS]
|
||||
fldz
|
||||
mc_CMP_ST0_ST1
|
||||
cmovnc ecx, edx
|
||||
call TConsole_Prout
|
||||
|
||||
mcLoadLocal ebx, loc35.pTrekData
|
||||
fld [ebx + TREKDATA.SHLD]
|
||||
fld [esp + loc35.dbl_ETRANS]
|
||||
faddp
|
||||
fstp [ebx + TREKDATA.SHLD]
|
||||
|
||||
fld [ebx + TREKDATA.ENERGY]
|
||||
fld [esp + loc35.dbl_ETRANS]
|
||||
fsubp
|
||||
fstp [ebx + TREKDATA.ENERGY]
|
||||
|
||||
.L90:
|
||||
mcLoadLocal esi, loc35.pTrekData
|
||||
fld [esi + TREKDATA.SHLD]
|
||||
fldz
|
||||
mc_CMP_ST0_ST1
|
||||
jc .done
|
||||
|
||||
dec [esi + TREKDATA.SHLDUP]
|
||||
|
||||
.done:
|
||||
mcEndLocals loc35.size
|
||||
ret
|
||||
|
||||
; --- EOF ---
|
@ -1,519 +0,0 @@
|
||||
; --------------------------------------------------------------------------
|
||||
; FILE: TSrScan.Asm
|
||||
; DATE: October 11, 2008
|
||||
; --------------------------------------------------------------------------
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Input:
|
||||
; AL = character from QUAD array
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TSrScan_SetCosmosAttr:
|
||||
push ecx
|
||||
|
||||
mcOnRegEqu al, CHAR_ASTERISK, .attr_star
|
||||
mcOnRegEqu al, CHAR_BLACK_HOLE, .attr_bhole
|
||||
mcOnRegEqu al, CHAR_COMMANDER, .attr_klingon
|
||||
mcOnRegEqu al, CHAR_ENTERPRISE, .attr_ship
|
||||
mcOnRegEqu al, CHAR_FQUEENE, .attr_ship
|
||||
mcOnRegEqu al, CHAR_KLINGON, .attr_klingon
|
||||
mcOnRegEqu al, CHAR_PLANET, .attr_planet
|
||||
mcOnRegEqu al, CHAR_ROMULAN, .attr_romulan
|
||||
mcOnRegEqu al, CHAR_SCOM, .attr_klingon
|
||||
mcOnRegEqu al, CHAR_STARBASE, .attr_base
|
||||
mcOnRegEqu al, CHAR_THING, .attr_thing
|
||||
mcOnRegEqu al, CHAR_THOLIAN, .attr_tholian
|
||||
mcOnRegEqu al, CHAR_WEB, .attr_web
|
||||
|
||||
mov cl, ATTR_COSMOS
|
||||
jmp .apply
|
||||
|
||||
.attr_star:
|
||||
mov cl, ATTR_STAR
|
||||
jmp .apply
|
||||
|
||||
.attr_bhole:
|
||||
mov cl, ATTR_BLACK_HOLE
|
||||
jmp .apply
|
||||
|
||||
.attr_klingon:
|
||||
mov cl, ATTR_KLINGON
|
||||
jmp .apply
|
||||
|
||||
.attr_ship:
|
||||
mov cl, ATTR_SHIP
|
||||
jmp .apply
|
||||
|
||||
.attr_planet:
|
||||
mov cl, ATTR_PLANET
|
||||
jmp .apply
|
||||
|
||||
.attr_romulan:
|
||||
mov cl, ATTR_ROMULAN
|
||||
jmp .apply
|
||||
|
||||
.attr_base:
|
||||
mov cl, ATTR_BASE
|
||||
jmp .apply
|
||||
|
||||
.attr_thing:
|
||||
mov cl, ATTR_BLACK_HOLE
|
||||
jmp .apply
|
||||
|
||||
.attr_tholian:
|
||||
mov cl, ATTR_THOLIAN
|
||||
jmp .apply
|
||||
|
||||
.attr_web:
|
||||
mov cl, ATTR_WEB
|
||||
|
||||
.apply:
|
||||
call TConsole_SetAttr
|
||||
pop ecx
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Input:
|
||||
; EAX = row index from 1 to 10
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TSrScan_CramSpaceRow:
|
||||
dec eax
|
||||
imul eax, 10
|
||||
|
||||
mcLoadGameDataPtr edx
|
||||
lea esi, [edx + eax + TREKDATA.QUAD]
|
||||
mcLoad8bitsToReg32 ecx, 10
|
||||
|
||||
.dump_sector:
|
||||
push ecx
|
||||
|
||||
lodsb
|
||||
call TSrScan_SetCosmosAttr
|
||||
call TConsole_PutChar
|
||||
mov al, CHAR_BLANK
|
||||
call TConsole_PutChar
|
||||
|
||||
pop ecx
|
||||
loop .dump_sector
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Input:
|
||||
; ECX = index of SRSCAN report item text
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TSrScan_Helper1:
|
||||
call TConsole_Cram
|
||||
mov cl, ATTR_REPORT_VALUE
|
||||
call TConsole_SetAttr
|
||||
mcLoadGameDataPtr ebx
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TSrScan_PrintTubesInfo:
|
||||
mov ecx, 705
|
||||
call TConsole_Cram
|
||||
|
||||
mcLoadGameDataPtr esi
|
||||
movzx eax, [esi + TREKDATA.NPTUBES]
|
||||
call TConsole_CramInt
|
||||
|
||||
mcLoadGameDataPtr esi
|
||||
cmp [esi + TREKDATA.QTORPS], 0
|
||||
je .close_bracket
|
||||
cmp [esi + TREKDATA.TORPS], 0
|
||||
je .close_bracket
|
||||
|
||||
mov ecx, 706
|
||||
call TConsole_Cram
|
||||
|
||||
.close_bracket:
|
||||
mov al, ')'
|
||||
call TConsole_PutChar
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Input:
|
||||
; EAX = row index from 1 to 10
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TSrScan_CramStatusRow:
|
||||
mov cl, ATTR_REPORT_TEXT
|
||||
call TConsole_SetAttr
|
||||
|
||||
mcOnRegEqu eax, 1, .print_stardate
|
||||
mcOnRegEqu eax, 2, .print_condition
|
||||
mcOnRegEqu eax, 3, .print_position
|
||||
mcOnRegEqu eax, 4, .print_lsupport
|
||||
mcOnRegEqu eax, 5, .print_warp
|
||||
mcOnRegEqu eax, 6, .print_energy
|
||||
mcOnRegEqu eax, 7, .print_torpedoes
|
||||
mcOnRegEqu eax, 8, .print_shields
|
||||
mcOnRegEqu eax, 9, .print_klingons
|
||||
;
|
||||
; Time left
|
||||
;
|
||||
mcLoad8bitsToReg32 ecx, 103
|
||||
call TSrScan_Helper1
|
||||
|
||||
fld [ebx + TREKDATA.REMTIME]
|
||||
mov cl, 2
|
||||
call TConsole_CramFloat
|
||||
jmp .done
|
||||
|
||||
.print_stardate:
|
||||
mcLoad8bitsToReg32 ecx, 94
|
||||
call TSrScan_Helper1
|
||||
|
||||
fld [ebx + TREKDATA.DATE]
|
||||
mov cl, 1
|
||||
call TConsole_CramFloat
|
||||
jmp .done
|
||||
|
||||
.print_condition:
|
||||
mcLoad8bitsToReg32 ecx, 95
|
||||
call TSrScan_Helper1
|
||||
|
||||
cmp [ebx + TREKDATA.CONDIT], CONDITION_DOCKED
|
||||
je .do_condition
|
||||
|
||||
push ebx
|
||||
call TCommon_NewCondition
|
||||
pop ebx
|
||||
|
||||
.do_condition:
|
||||
movzx eax, [ebx + TREKDATA.CONDIT]
|
||||
mov esi, glb_AttrCondition
|
||||
mov cl, [esi + eax - 1]
|
||||
call TConsole_SetAttr
|
||||
|
||||
lea ecx, [eax + 103]
|
||||
call TConsole_Cram
|
||||
jmp .done
|
||||
|
||||
.print_position:
|
||||
mcLoad8bitsToReg32 ecx, 96
|
||||
call TSrScan_Helper1
|
||||
|
||||
mov al, [ebx + TREKDATA.QUADX]
|
||||
mov dl, [ebx + TREKDATA.QUADY]
|
||||
mcZeroBits ecx
|
||||
push ebx
|
||||
call TConsole_CramLoc
|
||||
|
||||
mov al, ','
|
||||
call TConsole_PutChar
|
||||
pop ebx
|
||||
|
||||
mov al, [ebx + TREKDATA.SECTX]
|
||||
mov dl, [ebx + TREKDATA.SECTY]
|
||||
mcZeroBits ecx
|
||||
call TConsole_CramLoc
|
||||
jmp .done
|
||||
|
||||
.print_lsupport:
|
||||
mcLoad8bitsToReg32 ecx, 97
|
||||
call TSrScan_Helper1
|
||||
|
||||
mov cl, DEV_LIFE_SUPPORT
|
||||
call TArray_IsDamaged
|
||||
jc .L44
|
||||
|
||||
mcLoad8bitsToReg32 ecx, 108
|
||||
call TConsole_Cram
|
||||
jmp .done
|
||||
|
||||
.L44:
|
||||
cmp [ebx + TREKDATA.CONDIT], CONDITION_DOCKED
|
||||
jne .L45
|
||||
|
||||
mcLoad8bitsToReg32 ecx, 109
|
||||
call TConsole_Cram
|
||||
jmp .done
|
||||
|
||||
.L45:
|
||||
mcLoad8bitsToReg32 ecx, 110
|
||||
push ebx
|
||||
call TConsole_Cram
|
||||
pop ebx
|
||||
|
||||
fld [ebx + TREKDATA.LSUPRES]
|
||||
mov cl, 2
|
||||
mov dl, 4
|
||||
call TConsole_CramFloatWidth
|
||||
jmp .done
|
||||
|
||||
.print_warp:
|
||||
mcLoad8bitsToReg32 ecx, 98
|
||||
call TSrScan_Helper1
|
||||
|
||||
fld [ebx + TREKDATA.WARPFAC]
|
||||
mov cl, 1
|
||||
call TConsole_CramFloat
|
||||
jmp .done
|
||||
|
||||
.print_energy:
|
||||
mcLoad8bitsToReg32 ecx, 99
|
||||
call TSrScan_Helper1
|
||||
|
||||
fld [ebx + TREKDATA.ENERGY]
|
||||
mov cl, 2
|
||||
call TConsole_CramFloat
|
||||
jmp .done
|
||||
|
||||
.print_torpedoes:
|
||||
mcLoad8bitsToReg32 ecx, 100
|
||||
call TSrScan_Helper1
|
||||
|
||||
movzx eax, [ebx + TREKDATA.TORPS]
|
||||
call TConsole_CramInt
|
||||
call TSrScan_PrintTubesInfo
|
||||
jmp .done
|
||||
|
||||
.print_shields:
|
||||
mcLoad8bitsToReg32 ecx, 101
|
||||
call TSrScan_Helper1
|
||||
|
||||
mov cl, DEV_SHIELDS
|
||||
call TArray_IsDamaged
|
||||
jc .shields_damaged
|
||||
|
||||
movzx ecx, [ebx + TREKDATA.SHLDUP]
|
||||
add cl, 120
|
||||
|
||||
.cram_shields_state:
|
||||
push ebx
|
||||
call TConsole_Cram
|
||||
pop ebx
|
||||
|
||||
fld [ebx + TREKDATA.SHLD]
|
||||
fld [ebx + TREKDATA.INSHLD]
|
||||
fdivp
|
||||
fld [glb_dbl_100]
|
||||
fmulp
|
||||
frndint
|
||||
call TCommon_FP_Truncate
|
||||
push ebx
|
||||
call TConsole_CramInt
|
||||
|
||||
mcLoad8bitsToReg32 ecx, 111
|
||||
call TConsole_Cram
|
||||
|
||||
pop ebx
|
||||
fld [ebx + TREKDATA.SHLD]
|
||||
frndint
|
||||
call TCommon_FP_Truncate
|
||||
call TConsole_CramInt
|
||||
|
||||
mcLoad8bitsToReg32 ecx, 112
|
||||
call TConsole_Cram
|
||||
jmp .done
|
||||
|
||||
.shields_damaged:
|
||||
mcLoad8bitsToReg32 ecx, 119
|
||||
jmp .cram_shields_state
|
||||
|
||||
.print_klingons:
|
||||
mcLoad8bitsToReg32 ecx, 102
|
||||
call TSrScan_Helper1
|
||||
|
||||
movzx eax, [ebx + TREKDATA.REMKL]
|
||||
call TConsole_CramInt
|
||||
|
||||
.done:
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; STATUS
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TSrScan_Status:
|
||||
call TConsole_ScrollUp
|
||||
|
||||
mcLoad1 eax
|
||||
mcLoad8bitsToReg32 ecx, 10
|
||||
|
||||
.dump_row:
|
||||
push eax ecx
|
||||
|
||||
call TSrScan_CramStatusRow
|
||||
call TConsole_ScrollUp
|
||||
|
||||
pop ecx eax
|
||||
inc eax
|
||||
loop .dump_row
|
||||
|
||||
call TConsole_ScrollUp
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; REQUEST
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TSrScan_Request:
|
||||
|
||||
.L301:
|
||||
call TCmdBuf_Scan
|
||||
cmp [ebx + TCmdBuf.cmdbuf_KEY], CMD_TOKEN_ALPHA
|
||||
je .L303
|
||||
|
||||
.L302:
|
||||
mcLoad8bitsToReg32 ecx, 115
|
||||
call TGame_Prompt
|
||||
jmp .L301
|
||||
|
||||
.L303:
|
||||
mcLoad8bitsToReg32 edx, 1
|
||||
|
||||
.check_cmd:
|
||||
mcLoad8bitsToReg32 ecx, 122
|
||||
add ecx, edx
|
||||
push edx
|
||||
call TCmdBuf_Crop
|
||||
pop edx
|
||||
jc .row_in_EDX
|
||||
|
||||
inc edx
|
||||
cmp edx, 10
|
||||
jbe .check_cmd
|
||||
;
|
||||
; List possible request items
|
||||
;
|
||||
call TConsole_ScrollUp
|
||||
call TConsole_SetGameMsgAttr
|
||||
mcLoad8bitsToReg32 ecx, 116
|
||||
call TConsole_Prout
|
||||
mcLoad8bitsToReg32 ecx, 117
|
||||
call TConsole_Prout
|
||||
mcLoad8bitsToReg32 ecx, 118
|
||||
call TConsole_Prout
|
||||
call TConsole_ScrollUp
|
||||
jmp .L302
|
||||
|
||||
.row_in_EDX:
|
||||
push edx
|
||||
call TConsole_ScrollUp
|
||||
pop eax
|
||||
;
|
||||
; Due to mapping we need to swap places of
|
||||
; TIME and TORPEDOES request. Basic logic here as follows:
|
||||
;
|
||||
; IF (EAX == 7) THEN EAX=10
|
||||
; IF (EAX == 10) THEN EAX=7
|
||||
;
|
||||
mcOnRegEqu eax, 7, .load_10
|
||||
mcOnRegEqu eax, 10, .load_7
|
||||
|
||||
.dump_info:
|
||||
call TSrScan_CramStatusRow
|
||||
call TConsole_ScrollUp
|
||||
call TConsole_ScrollUp
|
||||
ret
|
||||
|
||||
.load_7:
|
||||
sub eax, 3
|
||||
jmp .dump_info
|
||||
|
||||
.load_10:
|
||||
add eax, 3
|
||||
jmp .dump_info
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; SRSCAN
|
||||
; --------------------------------------------------------------------------
|
||||
virtual at 0
|
||||
loc24:
|
||||
.bRightSide BOOL ?
|
||||
.nRow INDEX ?
|
||||
.size = $
|
||||
end virtual
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TSrScan_Main:
|
||||
mcBeginLocals loc24.size
|
||||
|
||||
mov cl, DEV_SR_SENSORS
|
||||
call TArray_IsDamaged
|
||||
jnc .proceed
|
||||
|
||||
mcLoadGameDataPtr ebx
|
||||
cmp [ebx + TREKDATA.CONDIT], CONDITION_DOCKED
|
||||
jne .not_available
|
||||
|
||||
.proceed:
|
||||
mcLoad1 eax
|
||||
mcStoreLocal loc24.bRightSide, eax
|
||||
mcStoreLocal loc24.nRow, eax
|
||||
|
||||
call TCmdBuf_Scan
|
||||
cmp [ebx + TCmdBuf.cmdbuf_KEY], CMD_TOKEN_EOL
|
||||
je .L3
|
||||
|
||||
mcLoad8bitsToReg32 ecx, 122
|
||||
call TCmdBuf_Crop
|
||||
jnc .L3
|
||||
|
||||
dec [esp + loc24.bRightSide]
|
||||
|
||||
.L3:
|
||||
mcLoadLocal ecx, loc24.nRow
|
||||
mcLoadGameDataPtr ebx
|
||||
mcLoadMember al, TREKDATA.QUADX
|
||||
mcLoadMember dl, TREKDATA.QUADY
|
||||
call TArray_SetStarChartValue
|
||||
call TArray_SetScanned
|
||||
|
||||
call TConsole_ScrollUp
|
||||
|
||||
mov cl, ATTR_SCAN_SCALE
|
||||
call TConsole_SetAttr
|
||||
mcLoad8bitsToReg32 ecx, 113
|
||||
call TConsole_Prout
|
||||
|
||||
.dump_row:
|
||||
mov cl, ATTR_SCAN_SCALE
|
||||
call TConsole_SetAttr
|
||||
|
||||
mcLoadLocal eax, loc24.nRow
|
||||
mov cl, 3
|
||||
call TConsole_CramIntWidth
|
||||
|
||||
mov al, CHAR_BLANK
|
||||
call TConsole_PutChar
|
||||
|
||||
mcLoadLocal eax, loc24.nRow
|
||||
call TSrScan_CramSpaceRow
|
||||
|
||||
cmp [esp + loc24.bRightSide], 0
|
||||
je .next_row
|
||||
|
||||
mcLoadLocal eax, loc24.nRow
|
||||
call TSrScan_CramStatusRow
|
||||
|
||||
.next_row:
|
||||
call TConsole_ScrollUp
|
||||
|
||||
inc [esp + loc24.nRow]
|
||||
cmp [esp + loc24.nRow], 10
|
||||
jbe .dump_row
|
||||
|
||||
mov cl, ATTR_SCAN_SCALE
|
||||
call TConsole_SetAttr
|
||||
mcLoad8bitsToReg32 ecx, 113
|
||||
call TConsole_Prout
|
||||
jmp .done
|
||||
|
||||
.not_available:
|
||||
call TConsole_SetGameMsgAttr
|
||||
call TConsole_ScrollUp
|
||||
mcLoad8bitsToReg32 ecx, 114
|
||||
call TConsole_Prout
|
||||
|
||||
.done:
|
||||
call TConsole_ScrollUp
|
||||
mcEndLocals loc24.size
|
||||
ret
|
||||
|
||||
; --- EOF ---
|
@ -1,78 +0,0 @@
|
||||
; --------------------------------------------------------------------------
|
||||
; FILE: TString.Asm
|
||||
; DATE: September 21, 2008
|
||||
; --------------------------------------------------------------------------
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Input:
|
||||
; ESI = source string
|
||||
; EDI = destination string
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TString_Copy:
|
||||
mcZeroBits eax
|
||||
|
||||
.more:
|
||||
lodsw
|
||||
stosw
|
||||
mcOnRegNotZero eax, .more
|
||||
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Input:
|
||||
; ESI = source string
|
||||
; EDI = destination string
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TString_AnsiCopy:
|
||||
mcZeroBits eax
|
||||
|
||||
.more:
|
||||
lodsb
|
||||
stosb
|
||||
mcOnRegNotZero eax, .more
|
||||
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Input:
|
||||
; ESI = string #1
|
||||
; EDI = string #2
|
||||
; Output:
|
||||
; CF=1 if strings are same
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TString_AnsiEqual:
|
||||
push esi edi
|
||||
|
||||
.check_both:
|
||||
cmpsb
|
||||
jne .ret_false
|
||||
|
||||
cmp byte [esi - 1], 0
|
||||
jne .check_both
|
||||
|
||||
pop edi esi
|
||||
stc
|
||||
ret
|
||||
|
||||
.ret_false:
|
||||
pop edi esi
|
||||
clc
|
||||
ret
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; Input:
|
||||
; ESI = source string
|
||||
; EDI = destination string
|
||||
; Output:
|
||||
; EDI = set to concatenate another string
|
||||
; --------------------------------------------------------------------------
|
||||
align PROC_ALIGN
|
||||
TString_CopyEx:
|
||||
call TString_Copy
|
||||
sub edi, 2
|
||||
ret
|
||||
|
||||
; --- EOF ---
|
@ -1,255 +0,0 @@
|
||||
; -----------------------------------------------------------
|
||||
; Win32 API definitions
|
||||
; -----------------------------------------------------------
|
||||
|
||||
; -----------------------------------------------------------
|
||||
; Type Alias Section
|
||||
; -----------------------------------------------------------
|
||||
|
||||
INT32 equ dd
|
||||
PINT32 equ dd
|
||||
INT16 equ dw
|
||||
SHORT equ dw
|
||||
WNDPROC equ dd
|
||||
COUNT equ dd
|
||||
UINT32 equ dd
|
||||
UINT8 equ db
|
||||
WORD equ dw
|
||||
BYTE equ db
|
||||
CHAR equ db
|
||||
PBYTE equ dd
|
||||
NBYTES equ dd
|
||||
HICON equ dd
|
||||
HBRUSH equ dd
|
||||
HBITMAP equ dd
|
||||
HCURSOR equ dd
|
||||
HINSTANCE equ dd
|
||||
PWCHAR equ dd
|
||||
PCHAR equ dd
|
||||
PPCHAR equ dd
|
||||
PDOUBLE equ dd
|
||||
PPWCHAR equ dd
|
||||
WCHARS equ rw
|
||||
CHARS equ rb
|
||||
HWND equ dd
|
||||
DOUBLE equ dt
|
||||
DOUBLES equ rt
|
||||
HANDLE equ dd
|
||||
HFILE equ dd
|
||||
HDC equ dd
|
||||
HFONT equ dd
|
||||
BOOL equ dd
|
||||
PBOOL equ dd
|
||||
LONG equ dd
|
||||
WPARAM equ dd
|
||||
LPARAM equ dd
|
||||
INDEX equ dd
|
||||
COLORREF equ dd
|
||||
PSIZE equ dd
|
||||
PVOID equ dd
|
||||
PCOORD equ dd
|
||||
FUNCTOR equ dd
|
||||
PDEVICE equ dd
|
||||
STRINGS equ rd
|
||||
INTEGERS equ rd
|
||||
POINTERS equ rd
|
||||
COLORREFS equ rd
|
||||
CHARS equ rb
|
||||
BYTES equ rb
|
||||
|
||||
; -----------------------------------------------------------
|
||||
; Pointers to classes
|
||||
; -----------------------------------------------------------
|
||||
|
||||
PTLine equ dd
|
||||
PTOutputCell equ dd
|
||||
PTCmdBuf equ dd
|
||||
PTRandom equ dd
|
||||
PTPalette equ dd
|
||||
PTGameState equ dd
|
||||
PTPlanet equ dd
|
||||
PTKlingon equ dd
|
||||
PTCharAttr equ dd
|
||||
PTLineBuf equ dd
|
||||
PTConsole equ dd
|
||||
PTCharacter equ dd
|
||||
|
||||
; -----------------------------------------------------------
|
||||
; Constants
|
||||
; -----------------------------------------------------------
|
||||
|
||||
HEAP_NO_SERIALIZE = 1
|
||||
DEFAULT_CHARSET = 1
|
||||
LF_FACESIZE = 32
|
||||
IDC_ARROW = 32512
|
||||
IDI_EXCLAMATION = 32515
|
||||
SM_CXSCREEN = 0
|
||||
SM_CYSCREEN = 1
|
||||
WS_EX_APPWINDOW = 40000h
|
||||
WS_THICKFRAME = 40000h
|
||||
WS_SYSMENU = 80000h
|
||||
WS_MINIMIZEBOX = 20000h
|
||||
WS_CAPTION = 0C00000h
|
||||
WS_OVERLAPPEDWND = WS_CAPTION or WS_SYSMENU or WS_THICKFRAME or WS_MINIMIZEBOX
|
||||
WS_NOSIZEWND = WS_CAPTION or WS_SYSMENU or WS_MINIMIZEBOX
|
||||
WM_CREATE = 1
|
||||
WM_DESTROY = 2
|
||||
WM_PAINT = 0Fh
|
||||
WM_CLOSE = 10h
|
||||
WM_ERASEBKGND = 14h
|
||||
WM_CHAR = 102h
|
||||
WM_APP = 8000h
|
||||
MEM_COMMIT = 1000h
|
||||
MEM_RESERVE = 2000h
|
||||
MEM_RELEASE = 8000h
|
||||
PAGE_READWRITE = 4
|
||||
SW_SHOWNORMAL = 1
|
||||
SM_CYCAPTION = 4
|
||||
SM_CXBORDER = 5
|
||||
SM_CYBORDER = 6
|
||||
LOGPIXELSY = 90
|
||||
FW_NORMAL = 400
|
||||
CHAR_BACKSPACE = 8
|
||||
CHAR_ENTER = 0Dh
|
||||
CHAR_ESC = 1Bh
|
||||
CHAR_BLANK = 20h
|
||||
CHAR_COSMOS = 0B7h
|
||||
;CHAR_COSMOS = '.'
|
||||
CHAR_ASTERISK = '*'
|
||||
CHAR_ENTERPRISE = 'E'
|
||||
CHAR_FQUEENE = 'F'
|
||||
CHAR_ZERO = '0'
|
||||
CHAR_PLANET = 'P'
|
||||
CHAR_KLINGON = 'K'
|
||||
CHAR_ROMULAN = 'R'
|
||||
CHAR_SCOM = 'S'
|
||||
CHAR_THOLIAN = 'T'
|
||||
CHAR_WEB = '#'
|
||||
CHAR_THING = '?'
|
||||
CHAR_STARBASE = 'B'
|
||||
CHAR_BLACK_HOLE = '@'
|
||||
CHAR_COMMA = ','
|
||||
CHAR_COMMANDER = 'C'
|
||||
SRCCOPY = 0CC0020h
|
||||
FIXED_PITCH = 1
|
||||
TRANSPARENT = 1
|
||||
TA_UPDATECP = 1
|
||||
WHITE_BRUSH = 0
|
||||
BLACK_BRUSH = 4
|
||||
WM_CUSTOM_CMD_READY = (WM_APP + 1)
|
||||
WM_CUSTOM_DO_PRELIM = (WM_APP + 2)
|
||||
WM_CUSTOM_NEW_GAME = (WM_APP + 3)
|
||||
GENERIC_READ = 80000000h
|
||||
GENERIC_WRITE = 40000000h
|
||||
CREATE_ALWAYS = 2
|
||||
OPEN_EXISTING = 3
|
||||
FILE_FLAG_SEQ_SCAN = 08000000h
|
||||
FILE_ATTR_DIR = 10h
|
||||
|
||||
; -----------------------------------------------------------
|
||||
; Structure Definitions
|
||||
; -----------------------------------------------------------
|
||||
|
||||
virtual at 0
|
||||
SIZE:
|
||||
.size_Width INT32 ?
|
||||
.size_Height INT32 ?
|
||||
.size = $
|
||||
end virtual
|
||||
|
||||
virtual at 0
|
||||
RECT:
|
||||
.rc_Left INT32 ?
|
||||
.rc_Top INT32 ?
|
||||
.rc_Right INT32 ?
|
||||
.rc_Bottom INT32 ?
|
||||
.size = $
|
||||
end virtual
|
||||
|
||||
virtual at 0
|
||||
MSG:
|
||||
.msg_hWnd HWND ?
|
||||
.msg_uiMsg UINT32 ?
|
||||
.msg_wParam WPARAM ?
|
||||
.msg_lParam LPARAM ?
|
||||
.msg_uiTime UINT32 ?
|
||||
.msg_xCoord INT32 ?
|
||||
.msg_yCoord INT32 ?
|
||||
.size = $
|
||||
end virtual
|
||||
|
||||
virtual at 0
|
||||
LOGFONT:
|
||||
.lf_Height LONG ?
|
||||
.lf_Width LONG ?
|
||||
.lf_Escapement LONG ?
|
||||
.lf_Orientation LONG ?
|
||||
.lf_Weight LONG ?
|
||||
.lf_Italic UINT8 ?
|
||||
.lf_Underline UINT8 ?
|
||||
.lf_StrikeOut UINT8 ?
|
||||
.lf_CharSet UINT8 ?
|
||||
.lf_OutPrecision UINT8 ?
|
||||
.lf_ClipPrecision UINT8 ?
|
||||
.lf_Quality UINT8 ?
|
||||
.lf_PitchAndFamily UINT8 ?
|
||||
.lf_FaceName WCHARS LF_FACESIZE
|
||||
.size = $
|
||||
end virtual
|
||||
|
||||
virtual at 0
|
||||
WIN32_FIND_DATA:
|
||||
.dwAttr UINT32 ?
|
||||
._pad1 rd 10
|
||||
.strName WCHARS 260
|
||||
.strName2 WCHARS 14
|
||||
.size = $
|
||||
end virtual
|
||||
|
||||
virtual at 0
|
||||
SYSTIME:
|
||||
.wYear WORD ?
|
||||
.wMonth WORD ?
|
||||
.wDayOfWeek WORD ?
|
||||
.wDay WORD ?
|
||||
.wHour WORD ?
|
||||
.wMinute WORD ?
|
||||
.wSecond WORD ?
|
||||
.wMillisecond WORD ?
|
||||
.size = $
|
||||
end virtual
|
||||
|
||||
virtual at 0
|
||||
PAINTSTRUCT:
|
||||
.hDC HDC ?
|
||||
.bErase BOOL ?
|
||||
.rcPaint rb RECT.size
|
||||
.bRestore BOOL ?
|
||||
.bIncUpdate BOOL ?
|
||||
.rgbReserved rb 32
|
||||
.size = $
|
||||
end virtual
|
||||
|
||||
virtual at 0
|
||||
LOCATION:
|
||||
.coord_X BYTE ?
|
||||
.coord_Y BYTE ?
|
||||
.size = $
|
||||
end virtual
|
||||
|
||||
virtual at 0
|
||||
WNDCLASS:
|
||||
.wc_style UINT32 ?
|
||||
.wc_lpfnWndProc WNDPROC ?
|
||||
.wc_cbClsExtra NBYTES ?
|
||||
.wc_cbWndExtra NBYTES ?
|
||||
.wc_hInstance HINSTANCE ?
|
||||
.wc_hIcon HICON ?
|
||||
.wc_hCursor HCURSOR ?
|
||||
.wc_hbrBackground HBRUSH ?
|
||||
.wc_lpszMenuName PWCHAR ?
|
||||
.wc_lpszClassName PWCHAR ?
|
||||
.size = $
|
||||
end virtual
|
||||
|
||||
;<EOF>
|
Loading…
Reference in New Issue
Block a user