Author Topic: Fantasy  (Read 1519 times)

0 Members and 1 Guest are viewing this topic.

Offline Juan Tamarit

  • Newbie
  • Posts: 53
Re: Fantasy
« Reply #15 on: June 18, 2021, 12:57:20 PM »
Question: if i have dimensioned a global variable dinamic array (REDIM SHARED) in general program, can i REDIM _PRESERVE in a SUB or FUNCTION, or should i REDIM SHARED _PRESERVE? O i can't REDIM it in a SUB/FUNC?

Offline FellippeHeitor

  • QB64 Developer
  • Forum Resident
  • Posts: 3064
  • Let it go, this too shall pass.
    • QB64.org
Re: Fantasy
« Reply #16 on: June 18, 2021, 01:42:32 PM »
If an array has been REDIM SHARED in the main module, you can REDIM _PRESERVE in a sub/function, but you must remember to specify the data type again (AS whatever type, or by using the type suffix).

Offline Juan Tamarit

  • Newbie
  • Posts: 53
Re: Fantasy
« Reply #17 on: June 23, 2021, 05:06:03 PM »
Hello there again. Sorry for my ignorance, but in the next SUB:

Code: QB64: [Select]
  1. SUB drawWorld () ' <-  if i could came up with a random generator... geez
  2.  
  3.     DIM i%
  4.     DIM j%
  5.     DIM tmp%%
  6.     DIM orgFile&
  7.     DIM destFile&
  8.     DIM tmpWorlds&
  9.  
  10.     IF NOT _FILEEXISTS("tmpWorlds.txt") THEN '              if this file dosn't exists means that we started a new game. We must create the first map of the game, wich is a pre-arranged map of the Town
  11.         CHDIR ".\.." '                                      so we move back to data
  12.         CHDIR ".\worlds" '                                  and into the pre-worlds folder
  13.         'we are @ Fantasy\data\wolrds\
  14.         orgFile& = FREEFILE '                               we need two filehandles: one for origin file,
  15.         destFile& = FREEFILE '                              and another for destination file
  16.         OPEN "town.txt" FOR INPUT AS #orgFile& '            we will extract info from this file
  17.         OPEN "tmp.txt" FOR OUTPUT AS #destFile& '           and place it into this one
  18.         WHILE NOT EOF(orgFile&) '                           we make sure we read the full file
  19.             INPUT #orgFile&, tmp%% '    ¿ <---------------- DATA TRANSFER
  20.             PRINT #destFile&, tmp%% '   ¾
  21.         WEND '                                              done with that thing
  22.         CLOSE #orgFile& '  ¿ <----------------------------- close files
  23.         CLOSE #destFile& ' ¾
  24.         CHDIR ".\.." '                                      move back to data
  25.         'we are @ Fantasy\data\
  26.         NAME ".\worlds\tmp.txt" AS ".\tmp\tmpWorlds.txt" '  now we extract the file from worlds folder and put it on tmp folder with the right name
  27.         CHDIR ".\tmp" '                                     into tmp folder again, map ready for use
  28.         'we are @ Fantasy\data\tmp\
  29.     END IF
  30.  
  31.     IF lastMapWorking%% <> actualMapWorking%% THEN '        if map has changed we need to actualize the WolrdTiles%% array
  32.         tmpWorlds& = FREEFILE '                             get a handle
  33.         OPEN "tmpWorlds.txt" FOR INPUT AS #tmpWorlds& '     we will extract data from this file
  34.         INPUT #tmpWorlds&, tmp%% '                          we check the first number of the file
  35.         WHILE tmp%% <> actualMapWorking%% '                 if it isn't the number of the level we need to know
  36.             FOR i% = 0 TO 279 '            ¿
  37.                 INPUT #tmpWorlds&, tmp%% ' ³ <------------ walk over the info of this map (which is not what we need to know, but we skip that data)
  38.             NEXT i% '                      ¾
  39.             INPUT #tmpWorlds&, tmp%% '                      and get the next number for evaluate again (that should be the number of next map)
  40.         WEND '                                              keep doing this untill the right map number has been found
  41.         FOR j% = 0 TO 13 '                    ¿
  42.             FOR i% = 0 TO 19 '                ³
  43.                 INPUT #tmpWorlds&, tmp%% '    ³ <---------- then extract the data we need
  44.                 WorldTiles%%(i%, j%) = tmp%% '³             and load it into WorldTiles%% array !
  45.             NEXT i% '                         ³
  46.         NEXT j% '                             ¾
  47.         CLOSE #tmpWorlds& '                                 close the file
  48.         lastMapWorking%% = actualMapWorking%% '             and actualize map situation, so no need for reload until the map changes
  49.     END IF
  50.  
  51.     FOR j% = 0 TO 13 '                                                          ¿
  52.         FOR i% = 0 TO 19 '                                                      ³
  53.             _PUTIMAGE (i% * 32, j% * 32 + 32), WorldImg&(WorldTiles%%(i%, j%)) '³ actual drawing
  54.         NEXT i% '                                                               ³
  55.     NEXT j% '                                                                   ¾
  56.  

I'm having an error that stands "file already open", particularly in line "OPEN "tmp.txt" FOR OUTPUT AS #destFile&". Does this means that QB64 can't have 2 files simoultaneously open? Or i'm making a mistake in the coding? Again, sorry by my newbiesness, but i can't understand what is wrong whit this

Cheers to all bros in forum. Still waiting for comments on the idea of the program!

Offline Juan Tamarit

  • Newbie
  • Posts: 53
Re: Fantasy
« Reply #18 on: June 23, 2021, 05:28:26 PM »
By the way, this is the version im actuly working on. Also attached the folder structure and assets as they work now:

Code: QB64: [Select]
  1. 'we are @ Fantasy\
  2. '----------------------------------------------------------------------------------------------------------Û    SETUP    Û--------------------------------------------------------------------------------------------------------------
  3. SCREEN _NEWIMAGE(640, 480, 32) ' enter in graphics mode 640x480 32 bith color depth
  4. _FULLSCREEN ' fullscreen mode, make it shine
  5. _MOUSEHIDE ' dont show OS cursor, we will use our own
  6. 'x = 20 cells
  7. 'y = 15 cells(14 in fact for gameplay, the upper one holds the HUD)
  8.  
  9. '----------------------------------------------------------------------------------------------------------Û VARAIABLES Û--------------------------------------------------------------------------------------------------------------
  10. 'Û PROGRAM GLOBALS Û- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  11. CONST FALSE = 0: CONST TRUE = NOT FALSE ' ying-yang
  12. DIM SHARED menuMain AS _BIT
  13. DIM SHARED menuPocket AS _BIT
  14. DIM SHARED menuSpells AS _BIT
  15. DIM SHARED menuStats AS _BIT
  16. DIM SHARED menuHelp AS _BIT
  17. DIM SHARED menuMap AS _BIT
  18. DIM SHARED playerTurn AS _BIT
  19. DIM SHARED HUDpromt$
  20.  
  21. 'im gonna use this?
  22. DIM SHARED drawFingerAs AS _BYTE
  23. DIM SHARED clockForFantasy AS _BYTE
  24. DIM SHARED historyTimeline AS _BYTE
  25. 'Û COLORS Û- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  26. CONST GREEN1 = _RGB32(215, 232, 148) ' lighter ¿
  27. CONST GREEN2 = _RGB32(174, 196, 64) '          ³ colors
  28. CONST GREEN3 = _RGB32(82, 127, 57) '           ³
  29. CONST GREEN4 = _RGB32(32, 70, 49) ' darker     Ù
  30.  
  31. 'Û IMAGES Û- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  32. DIM SHARED ArmorImg&(7): DIM SHARED ArrowImg&(2): DIM SHARED AxeImg&(7): DIM SHARED BarImg&(6): DIM SHARED BijouImg&(3): DIM SHARED BoltImg&(1): DIM SHARED BombImg&(2): DIM SHARED BookImg&(3): DIM SHARED BowImg&(2)
  33. DIM SHARED ChestImg&(1): DIM SHARED CrossbowImg&(1): DIM SHARED DirArrowImg&(12): DIM SHARED EnemyImg&(31): DIM SHARED FingerImg&(8): DIM SHARED GndItemsImg&(17): DIM SHARED HeartImg&(5): DIM SHARED HelmImg&(7)
  34. DIM SHARED HeroImg&(7): DIM SHARED HUDImg&(3): DIM SHARED KeyImg&(5): DIM SHARED LightImg&(7): DIM SHARED LvlImg&(10): DIM SHARED MoneyImg&(3): DIM SHARED PaperImg&(1): DIM SHARED PortalImg&(7): DIM SHARED PotionImg&(7)
  35. DIM SHARED ShieldImg&(7): DIM SHARED SpellImg&(5): DIM SHARED SwordImg&(7): DIM SHARED ThrowImg&(2): DIM SHARED WandImg&(7): DIM SHARED WorldImg&(23)
  36. DIM SHARED BlankImg&
  37.  
  38. 'Û MECHS Û- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  39. TYPE MECHANICAL
  40.     x AS INTEGER ' mouse x position
  41.     y AS INTEGER ' mouse y position
  42.     kind AS _BYTE
  43.     map AS _BYTE
  44.     state AS _BYTE
  45. REDIM SHARED Mechs(0) AS MECHANICAL
  46.  
  47. 'Û POINTER/MOUSE Û- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  48. TYPE POINTER '
  49.     x AS INTEGER ' mouse x position
  50.     y AS INTEGER ' mouse y position
  51.     image AS LONG ' mouse aspect
  52.     clickL AS _BYTE ' left click
  53.     clickR AS _BYTE ' right click
  54.     tmpClickL AS _BYTE '¿
  55.     tmpClickR AS _BYTE '³ debouncing
  56.     oldClickL AS _BYTE '³ stuff
  57.     oldClickR AS _BYTE
  58. DIM SHARED Finger AS POINTER ' create the mouse
  59.  
  60. 'Û HERO Û- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  61. TYPE USER '
  62.     x AS INTEGER ' x position
  63.     y AS INTEGER ' y position
  64.     id AS STRING ' player name
  65.     class AS _BYTE ' 0=Barbarian, 1=Clerig, 2=Assasin or 3=Wizard
  66.     lvl AS _BYTE ' current character level
  67.     strength AS _BYTE '¿
  68.     agility AS _BYTE ' ³ basic
  69.     power AS _BYTE '   ³ skills
  70.     vigor AS _BYTE '   Ù
  71.     life AS INTEGER ' actual life ammount
  72.     mana AS INTEGER ' actual life ammount
  73.     xp AS INTEGER ' actual experience level
  74.     nextXp AS INTEGER ' the next target for lvlUp
  75.     prevNextXp AS INTEGER '
  76.     attributePoints AS INTEGER
  77. DIM SHARED Hero AS USER ' create the hero
  78.  
  79. 'Û ITEMS Û- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  80. TYPE OBJECT
  81.     x AS INTEGER
  82.     y AS INTEGER
  83.     kind AS _BYTE
  84.     lvl AS _BYTE ' level of the object
  85.     ammount AS INTEGER ' can be simply 1 or more
  86.     special AS STRING '<--------------------------¿
  87.     map AS _BYTE 'MAP number OR -1 for POCKET     ³
  88. END TYPE '                                        ³
  89. ' ITEMS SPECIAL VARIABLE:-------------------------¾
  90. 's=adds strength; a=adds agility; p=adds power; v=adds vigor;¿ CAN BE
  91. 'd=adds defense; b=adds to base damage;m=adds to max damage; ³ FROM 1              eg:a1,v3,d2,etc...
  92. 'c=adds to chance TO HIT%,will be multiplied by 7;           ¾ TO 3
  93.  
  94. 't= teaches some spell, for books (0 to 5) ;
  95. 'r= cast a spell, for wands and scrolls (0 to 5);
  96.  
  97. 'u=unidentified (has no number?)
  98.  
  99. DIM SHARED Pocket(22) AS OBJECT
  100. DIM SHARED inHand AS OBJECT
  101. REDIM SHARED Items(0) AS OBJECT
  102.  
  103. 'Û WORLD Û- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  104. DIM SHARED WorldTiles%%(19, 13)
  105. DIM SHARED actualMapWorking%%
  106. DIM SHARED lastMapWorking%%
  107.  
  108. 'Û ENEMIES Û- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  109. TYPE PROGRAMMER '
  110.     x AS INTEGER ' x position
  111.     y AS INTEGER ' y position
  112.     map AS _BYTE ' in wich map enemy is
  113.     lvl AS _BYTE ' enemies level goes from 0 to 31, same as the image array
  114.     life AS INTEGER 'enemy remaining life
  115.  
  116. REDIM SHARED Enemy(3) AS PROGRAMMER ' create enemies
  117.  
  118. 'Û SPELLS Û- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  119. DIM SHARED SpellsIknow%%(5) ' array contains the level that the player knows from each one of the spells 0 to 5. Never will be greater than 10
  120. DIM SHARED turnsRemainingSpell%%(5) ' array contains how many more turns the spell will be ON,when reaches 0 spell is OFF
  121. DIM SHARED lastSpellSelected%%(1) ' array contain: 0=the number of the last spell use; 1= the level of the last spell used
  122.  
  123. '----------------------------------------------------------------------------------------------------------Û PRE-PROGRAM Û--------------------------------------------------------------------------------------------------------------
  124. checkForAssets
  125. loadImages
  126. _ICON SpellImg&(0)
  127. _TITLE "Fantasy"
  128. loadProgramInitialVariables
  129. MKDIR "tmp"
  130. CHDIR ".\tmp" 'we are @ Fantasy\tmp\
  131. '----------------------------------------------------------------------------------------------------------Û   PROGRAM   Û--------------------------------------------------------------------------------------------------------------
  132.     _LIMIT 60
  133.     CLS , GREEN3
  134.  
  135.     HUDpromt$ = "" '       ¿ reinitialize this variables
  136.     drawFingerAs%% = 1 '   ¾
  137.  
  138.     'What happened to the MUSIC????? XD
  139.  
  140.     getMouseData
  141.     thingsYouCanDoWithFinger
  142.     keyboardInputs
  143.  
  144.     IF Hero.life > calculateMaxLife% THEN Hero.life = calculateMaxLife%
  145.     IF Hero.mana > calculateMaxMana% THEN Hero.mana = calculateMaxMana%
  146.     actualizeMoneyAspect
  147.  
  148.     IF actualMapWorking%% > -1 THEN drawMyFantasy
  149.     IF menuStats` = TRUE THEN showTheStats
  150.     IF menuPocket` = TRUE THEN lookInPocket
  151.     IF menuSpells = TRUE THEN selectSomeSpell
  152.     IF menuMain` = TRUE THEN mainMenu
  153.     IF actualMapWorking%% > -1 THEN drawHUD
  154.     printHUDpromt HUDpromt$
  155.     drawFinger
  156.     TESTER
  157.     _DISPLAY
  158. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  159. SUB thingsYouCanDoWithFinger () '°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°Û ACTION PERFORMING Û°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
  160.     DIM tmp%
  161.  
  162.     IF playerTurn` = TRUE THEN
  163.         drawFingerAs%% = 1
  164.         IF menuPocket` = TRUE THEN
  165.             itemManipulation ' if you are looking at pocket you are allowed to manipulate items there
  166.             IF NOT inHand.lvl = -1 THEN drawFingerAs%% = 3 ' if lvl of inhand isn't -1 means you are holding something
  167.         END IF
  168.         IF menuMain` = FALSE AND menuPocket` = FALSE AND menuSpells` = FALSE AND menuStats` = FALSE THEN
  169.             tmp% = checkFingerSector%
  170.  
  171.  
  172.  
  173.  
  174.  
  175.         END IF
  176.     ELSE
  177.         drawFingerAs%% = 6
  178.     END IF
  179.  
  180. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  181. FUNCTION checkFingerSector% ()
  182.  
  183.     IF fingerIsOnSurface%(Hero.x - 32, Hero.y + 32, 32, 32) THEN '     sector 1
  184.         checkFingerSector% = 1
  185.     ELSEIF fingerIsOnSurface%(Hero.x, Hero.y + 32, 32, 32) THEN '      sector 2
  186.         checkFingerSector% = 2
  187.     ELSEIF fingerIsOnSurface%(Hero.x + 32, Hero.y + 32, 32, 32) THEN ' sector 3
  188.         checkFingerSector% = 3
  189.     ELSEIF fingerIsOnSurface%(Hero.x - 32, Hero.y, 32, 32) THEN '      sector 4
  190.         checkFingerSector% = 4
  191.     ELSEIF fingerIsOnSurface%(Hero.x, Hero.y, 32, 32) THEN '           sector 5
  192.         checkFingerSector% = 5
  193.     ELSEIF fingerIsOnSurface%(Hero.x + 32, Hero.y, 32, 32) THEN '      sector 6
  194.         checkFingerSector% = 6
  195.     ELSEIF fingerIsOnSurface%(Hero.x - 32, Hero.y - 32, 32, 32) THEN ' sector 7
  196.         checkFingerSector% = 7
  197.     ELSEIF fingerIsOnSurface%(Hero.x, Hero.y - 32, 32, 32) THEN '      sector 8
  198.         checkFingerSector% = 8
  199.     ELSEIF fingerIsOnSurface%(Hero.x + 32, Hero.y - 32, 32, 32) THEN ' sector 9
  200.         checkFingerSector% = 9
  201.     ELSE '                     nothing to do, further away from playable sectors
  202.         checkFingerSector% = 0
  203.     END IF
  204.  
  205. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  206. FUNCTION checkEnemyPresenceInSector% (sect%, orgX%, orgY%)
  207.     FOR i% = 1 TO UBOUND(Enemy)
  208.         IF Enemy(i%).map = actualMapWorking%% THEN
  209.             SELECT CASE sect%
  210.                 CASE 1: IF Enemy(i%).x = orgX% - 32 AND Enemy(i%).y = orgY% + 32 THEN checkEnemyPresenceInSector% = TRUE: EXIT FUNCTION
  211.                 CASE 2: IF Enemy(i%).x = orgX% AND Enemy(i%).y = orgY% + 32 THEN checkEnemyPresenceInSector% = TRUE: EXIT FUNCTION
  212.                 CASE 3: IF Enemy(i%).x = orgX% + 32 AND Enemy(i%).y = orgY% + 32 THEN checkEnemyPresenceInSector% = TRUE: EXIT FUNCTION
  213.                 CASE 4: IF Enemy(i%).x = orgX% - 32 AND Enemy(i%).y = orgY% THEN checkEnemyPresenceInSector% = TRUE: EXIT FUNCTION
  214.                 CASE 6: IF Enemy(i%).x = orgX% + 32 AND Enemy(i%).y = orgY% THEN checkEnemyPresenceInSector% = TRUE: EXIT FUNCTION
  215.                 CASE 7: IF Enemy(i%).x = orgX% - 32 AND Enemy(i%).y = orgY% - 32 THEN checkEnemyPresenceInSector% = TRUE: EXIT FUNCTION
  216.                 CASE 8: IF Enemy(i%).x = orgX% AND Enemy(i%).y = orgY% - 32 THEN checkEnemyPresenceInSector% = TRUE: EXIT FUNCTION
  217.                 CASE 9: IF Enemy(i%).x = orgX% + 32 AND Enemy(i%).y = orgY% - 32 THEN checkEnemyPresenceInSector% = TRUE: EXIT FUNCTION
  218.             END SELECT
  219.         END IF
  220.     NEXT i%
  221.     checkEnemyPresenceInSector% = FALSE
  222. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  223. FUNCTION checkItemPresenceInSector% (sect%, orgX%, orgY%)
  224.     FOR i% = 1 TO UBOUND(Items)
  225.         IF Items(i%).map = actualMapWorking%% THEN
  226.             SELECT CASE sect%
  227.                 CASE 1: IF Items(i%).x = orgX% - 32 AND Items(i%).y = orgY% + 32 THEN checkItemPresenceInSector% = TRUE: EXIT FUNCTION
  228.                 CASE 2: IF Items(i%).x = orgX% AND Items(i%).y = orgY% + 32 THEN checkItemPresenceInSector% = TRUE: EXIT FUNCTION
  229.                 CASE 3: IF Items(i%).x = orgX% + 32 AND Items(i%).y = orgY% + 32 THEN checkItemPresenceInSector% = TRUE: EXIT FUNCTION
  230.                 CASE 4: IF Items(i%).x = orgX% - 32 AND Items(i%).y = orgY% THEN checkItemPresenceInSector% = TRUE: EXIT FUNCTION
  231.                 CASE 5: IF Items(i%).x = orgX% AND Items(i%).y = orgY% THEN checkItemPresenceInSector% = TRUE: EXIT FUNCTION
  232.                 CASE 6: IF Items(i%).x = orgX% + 32 AND Items(i%).y = orgY% THEN checkItemPresenceInSector% = TRUE: EXIT FUNCTION
  233.                 CASE 7: IF Items(i%).x = orgX% - 32 AND Items(i%).y = orgY% - 32 THEN checkItemPresenceInSector% = TRUE: EXIT FUNCTION
  234.                 CASE 8: IF Items(i%).x = orgX% AND Items(i%).y = orgY% - 32 THEN checkItemPresenceInSector% = TRUE: EXIT FUNCTION
  235.                 CASE 9: IF Items(i%).x = orgX% + 32 AND Items(i%).y = orgY% - 32 THEN checkItemPresenceInSector% = TRUE: EXIT FUNCTION
  236.             END SELECT
  237.         END IF
  238.     NEXT i%
  239.     checkItemPresenceInSector% = FALSE
  240. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  241. FUNCTION checkWorldAtSector% (sect%, orgX%, orgY%)
  242.     SELECT CASE sect%
  243.         CASE 1:
  244.         CASE 2:
  245.         CASE 3:
  246.         CASE 4:
  247.         CASE 5:
  248.         CASE 6:
  249.         CASE 7:
  250.         CASE 8:
  251.         CASE 9:
  252.     END SELECT
  253. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  254. FUNCTION checkMechPresenceInSector% (sect%, orgX%, orgY%)
  255. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  256. SUB drawFinger
  257.     SELECT CASE drawFingerAs%%
  258.         CASE 0: _PUTIMAGE (Finger.x - 8, Finger.y - 8), FingerImg&(0) 'cross
  259.         CASE 1: _PUTIMAGE (Finger.x - 1, Finger.y - 1), FingerImg&(1) 'finger
  260.         CASE 2: _PUTIMAGE (Finger.x - 1, Finger.y - 1), FingerImg&(2) 'attack sword
  261.         CASE 3: _PUTIMAGE (Finger.x - 1, Finger.y - 1), FingerImg&(3) 'grabbing hand
  262.         CASE 4: _PUTIMAGE (Finger.x - 8, Finger.y - 8), FingerImg&(4) 'wait clock
  263.         CASE 5: _PUTIMAGE (Finger.x - 1, Finger.y - 1), FingerImg&(5) 'GO
  264.         CASE 6: _PUTIMAGE (Finger.x - 1, Finger.y - 1), FingerImg&(6) 'sand clock
  265.         CASE 7: _PUTIMAGE (Finger.x - 1, Finger.y - 1), FingerImg&(7) '?
  266.         CASE 8: _PUTIMAGE (Finger.x - 1, Finger.y - 1), FingerImg&(8) '!
  267.         CASE 11:
  268.         CASE 12:
  269.     END SELECT
  270. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  271. SUB allowedMotions (where%)
  272.  
  273.     SELECT CASE where%
  274.         CASE 1
  275.             printHUDpromt "Move down & left" '                        ¿
  276.             _PUTIMAGE (Finger.x - 8, Finger.y - 8), DirArrowImg&(9) ' ³
  277.             IF Finger.clickL THEN '                                   ³
  278.                 Hero.y = Hero.y + 32 '                                ³
  279.                 Hero.x = Hero.x - 32 '
  280.                 gameTurn% = 0
  281.             END IF '                                                  ¾
  282.         CASE 2
  283.             printHUDpromt "Move down" '                                ¿
  284.             _PUTIMAGE (Finger.x - 8, Finger.y - 8), DirArrowImg&(10) ' ³
  285.             IF Finger.clickL THEN '                                    ³
  286.                 Hero.y = Hero.y + 32 '
  287.                 gameTurn% = 0
  288.             END IF '                                                   ¾
  289.         CASE 3
  290.             printHUDpromt "Move down & right" '                       ¿
  291.             _PUTIMAGE (Finger.x - 8, Finger.y - 8), DirArrowImg&(2) ' ³
  292.             IF Finger.clickL THEN '                                   ³
  293.                 Hero.y = Hero.y + 32 '                                ³
  294.                 Hero.x = Hero.x + 32 '
  295.                 gameTurn% = 0
  296.             END IF '                                                  ¾
  297.         CASE 4
  298.             printHUDpromt "Move left" '                               ¿
  299.             _PUTIMAGE (Finger.x - 8, Finger.y - 8), DirArrowImg&(7) ' ³
  300.             IF Finger.clickL THEN '                                   ³
  301.                 Hero.x = Hero.x - 32 '
  302.                 gameTurn% = 0
  303.             END IF '                                                  ¾
  304.         CASE 5
  305.             printHUDpromt "Rest one turn" '                         ¿
  306.             _PUTIMAGE (Finger.x - 8, Finger.y - 8), FingerImg&(4) ' ¾
  307.  
  308.             '!!!!!!!!!!!!!!!!!!!!
  309.             IF Finger.clickL THEN '                                   ³
  310.                 gameTurn% = 0
  311.             END IF '                                                  ¾
  312.             '!!!!!!!!!!!!!!!!!!!!
  313.  
  314.  
  315.         CASE 6
  316.             printHUDpromt "Move right" '                              ¿
  317.             _PUTIMAGE (Finger.x - 8, Finger.y - 8), DirArrowImg&(1) ' ³
  318.             IF Finger.clickL THEN '                                   ³
  319.                 Hero.x = Hero.x + 32 '
  320.                 gameTurn% = 0
  321.             END IF '                                                  ¾
  322.         CASE 7
  323.             printHUDpromt "Move up & left" '                          ¿
  324.             _PUTIMAGE (Finger.x - 8, Finger.y - 8), DirArrowImg&(8) ' ³
  325.             IF Finger.clickL THEN '                                   ³
  326.                 Hero.y = Hero.y - 32 '                                ³
  327.                 Hero.x = Hero.x - 32 '
  328.                 gameTurn% = 0
  329.             END IF '                                                  ¾
  330.         CASE 8
  331.             printHUDpromt "Move up" '                                 ¿
  332.             _PUTIMAGE (Finger.x - 8, Finger.y - 8), DirArrowImg&(4) ' ³
  333.             IF Finger.clickL THEN '                                   ³
  334.                 Hero.y = Hero.y - 32 '
  335.                 gameTurn% = 0
  336.             END IF '                                                  ¾
  337.         CASE 9
  338.             printHUDpromt "Move up & right" '                         ¿
  339.             _PUTIMAGE (Finger.x - 8, Finger.y - 8), DirArrowImg&(3) ' ³
  340.             IF Finger.clickL THEN '                                   ³
  341.                 Hero.y = Hero.y - 32 '                                ³
  342.                 Hero.x = Hero.x + 32 '
  343.                 gameTurn% = 0
  344.             END IF '                                                  ¾
  345.         CASE 0
  346.             _PUTIMAGE (Finger.x - 1, Finger.y - 1), FingerImg&(0) ' normal finger
  347.     END SELECT
  348.  
  349.  
  350. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  351.  
  352. SUB mainMenu () '°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°Û MENUS Û°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
  353.     ' TO DO: allow acces to SAVE GAME & LOAD GAME
  354.  
  355.     drawMenuBack 240, 99, 391, 306
  356.  
  357.     LOCATE 8, 37 '          ¿
  358.     PRINT "FANTASY"; '      ¾  TITLE
  359.  
  360.     _PUTIMAGE (259, 103), SpellImg&(0) '¿ demoniac
  361.     _PUTIMAGE (340, 103), SpellImg&(0) 'Ù stars
  362.  
  363.     IF actualMapWorking%% > -1 THEN '                 are we already playing?
  364.         _PUTIMAGE (369, 108), HUDImg&(3) '            then this menu has to show this image
  365.         IF fingerIsOnSurface%(369, 108, 16, 16) THEN '
  366.             HUDpromt$ = "Back to game"
  367.             IF Finger.clickL THEN menuMain` = FALSE
  368.         END IF
  369.     END IF
  370.  
  371.     LOCATE 10, 36
  372.     IF fingerIsOnSurface%(280, 144, 72, 16) THEN
  373.         COLOR GREEN4, GREEN1
  374.         IF Finger.clickL THEN
  375.             COLOR GREEN1, GREEN4 ' so no wrong printing in newGame
  376.             menuMain` = FALSE
  377.             menuPocket = FALSE
  378.             menuSpells` = FALSE
  379.             menuStats` = FALSE
  380.             newGame
  381.         END IF
  382.     ELSE
  383.         COLOR GREEN1, GREEN4
  384.     END IF
  385.     PRINT "New  game";
  386.  
  387.     LOCATE 12, 36
  388.     IF fingerIsOnSurface%(280, 176, 72, 16) THEN
  389.         COLOR GREEN4, GREEN1
  390.         IF Finger.clickL THEN loadGame
  391.     ELSE
  392.         COLOR GREEN1, GREEN4
  393.     END IF
  394.     PRINT "Load game";
  395.  
  396.     LOCATE 14, 36
  397.     IF actualMapWorking%% > -1 THEN ' we only allowed to save if we are playing
  398.         IF fingerIsOnSurface%(280, 208, 72, 16) THEN
  399.             COLOR GREEN4, GREEN1
  400.             'IF Finger.clickL THEN actualMenuWorking% = -7 '<----------------WRONG! assign a variable for this
  401.         ELSE
  402.             COLOR GREEN1, GREEN4
  403.         END IF
  404.     ELSE
  405.         COLOR GREEN3, GREEN4 ' if NOT in game
  406.     END IF
  407.     PRINT "Save Game";
  408.  
  409.     LOCATE 16, 38
  410.     IF fingerIsOnSurface%(296, 240, 32, 16) THEN
  411.         COLOR GREEN4, GREEN1
  412.         IF Finger.clickL THEN
  413.             menuMain` = FALSE
  414.             menuHelp` = TRUE
  415.         END IF
  416.     ELSE
  417.         COLOR GREEN1, GREEN4
  418.     END IF
  419.     PRINT "Help";
  420.  
  421.     LOCATE 18, 38
  422.     IF fingerIsOnSurface%(296, 272, 32, 16) THEN
  423.         COLOR GREEN4, GREEN1
  424.         IF Finger.clickL THEN
  425.             exitProgram
  426.         END IF
  427.     ELSE
  428.         COLOR GREEN1, GREEN4
  429.     END IF
  430.     PRINT "Exit";
  431.  
  432.     IF actualMapWorking%% > -1 THEN
  433.         IF fingerIsOnSurface%(280, 144, 72, 16) THEN HUDpromt$ = "Start a new game"
  434.         IF fingerIsOnSurface%(280, 176, 72, 16) THEN HUDpromt$ = "Load a saved game"
  435.         IF fingerIsOnSurface%(280, 208, 72, 16) THEN HUDpromt$ = "Save current game"
  436.         IF fingerIsOnSurface%(296, 240, 32, 16) THEN HUDpromt$ = "Learn how to play"
  437.         IF fingerIsOnSurface%(296, 272, 32, 16) THEN HUDpromt$ = "Close and leave"
  438.     END IF
  439.  
  440.     COLOR GREEN1, GREEN4 ' don't conlictuate with other stuff
  441.  
  442. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  443. SUB exitProgram ()
  444.     unloadImages
  445.     CHDIR ".\.." 'to data
  446.     RMDIR "tmp"
  447.     SYSTEM
  448. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  449. SUB newGame () '!!!!!!! set me to 0 after testing
  450.  
  451.     DIM i%
  452.  
  453.     actualMapWorking%% = -1 'leave actual game
  454.     Hero.lvl = 1 ' start with a fresh character
  455.     Hero.class = -1
  456.     Hero.id = ""
  457.     Hero.xp = 0 '              ¿
  458.     Hero.nextXp = 100 '        ³ with no xp
  459.     Hero.prevNextXp = 0 '      ³
  460.     Hero.attributePoints = 2 ' ¾<------!!!!!!! set me to 0 after testing
  461.     FOR i% = 0 TO 5
  462.         SpellsIknow%%(i%) = 1 ' you don't know any spells 'CHANGE ME TO 0 AFTER TESTING
  463.     NEXT i%
  464.     chooseClass '¿ don't switch
  465.     enterName '  Ù the order!
  466.     'Û LOAD CHARACTER INITIAL VARIABLES Û
  467.     SELECT CASE Hero.class 'according to class
  468.         CASE 0 'Barbarian       ¿
  469.             Hero.strength = 20
  470.             Hero.agility = 10 ' ³ BARBARIAN
  471.             Hero.power = 5 '    ³ SKILLS
  472.             Hero.vigor = 15 '   Ù
  473.         CASE 1 ' Clerig         ¿
  474.             Hero.strength = 15
  475.             Hero.agility = 5 '  ³ CLERIG
  476.             Hero.power = 10 '   ³ SKILLS
  477.             Hero.vigor = 20 '   Ù
  478.         CASE 2 'Assasin         ¿
  479.             Hero.strength = 10
  480.             Hero.agility = 20 ' ³ ASSASIN
  481.             Hero.power = 5 '    ³ SKILLS
  482.             Hero.vigor = 15 '   Ù
  483.         CASE 3 'Wizard          ¿
  484.             Hero.strength = 5 ' ³
  485.             Hero.agility = 10 ' ³ WIZARD
  486.             Hero.power = 20 '   ³ SKILLS
  487.             Hero.vigor = 15 '   ³
  488.     END SELECT '                Ù
  489.  
  490.     Hero.life = calculateMaxLife%
  491.     Hero.mana = calculateMaxMana%
  492.  
  493.     FOR i% = 0 TO 22
  494.         cleanOnePocketSlot i% ' clearPocket
  495.     NEXT i%
  496.  
  497.     equipOurHero
  498.     loadEnemiesInitialVariables
  499.     loadMechsInitialVariables
  500.     'showHistory 0
  501.  
  502.     actualMapWorking%% = 0 ' ¿ we start
  503.     Hero.x = 32 '            ³ at this
  504.     Hero.y = 64 '            Ù place
  505.  
  506. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  507. SUB loadGame () 'INCOMPLETE
  508.  
  509.     DIM leaving%
  510.     DIM keyPress$
  511.     DIM i%
  512.     DIM heroName$
  513.     DIM inputNumber%
  514.     DIM inputNumber2%
  515.     DIM tmpString$
  516.     DIM slot&(2)
  517.  
  518.     leaving% = 0
  519.     CHDIR ".\.." 'to data
  520.     CHDIR ".\saved" 'into saved
  521.     DO
  522.         _LIMIT 60
  523.         CLS , GREEN3
  524.         getMouseData
  525.  
  526.         drawMenuBack 240, 99, 391, 306
  527.         COLOR GREEN1, GREEN4 '¿
  528.         LOCATE 8, 36 '        ³ TITLE
  529.         PRINT "LOAD  GAME"; ' Ù
  530.  
  531.         keyPress$ = INKEY$ '
  532.         IF keyPress$ <> "" THEN '
  533.             IF ASC(keyPress$) = 27 THEN leaving% = 1 '
  534.         END IF '
  535.  
  536.         FOR i% = 0 TO 2 '
  537.             drawItemSlots 252, 142 + (i% * 48) '
  538.             slot&(i%) = FREEFILE
  539.             COLOR GREEN1, GREEN4
  540.             LOCATE 10 + (i% * 3), 37
  541.             tmpString$ = ".\save" + _TRIM$(STR$(i% + 1))
  542.             IF _DIREXISTS(tmpString$) THEN
  543.                 CHDIR tmpString$
  544.                 tmpString$ = "s" + _TRIM$(STR$(i% + 1)) + "Game.txt"
  545.                 OPEN tmpString$ FOR INPUT AS #slot&(i%)
  546.                 INPUT #slot&(i%), heroName$
  547.                 INPUT #slot&(i%), inputNumber%
  548.                 INPUT #slot&(i%), inputNumber2%
  549.                 CLOSE #slot&(i%)
  550.                 CHDIR ".\.."
  551.                 tmpString$ = calculateNameOfHeroClass$(inputNumber%) '
  552.                 tmpString$ = tmpString$ + "(" + _TRIM$(STR$(inputNumber2%)) + ")" '
  553.                 IF fingerIsOnSurface%(252, 142 + (i% * 48), 123, 32) THEN '
  554.                     COLOR GREEN4, GREEN1 '
  555.                     'IF Finger.clickL THEN acceptedLoadGame(1): EXIT DO? or EXIT SUB?
  556.                 END IF '
  557.                 PRINT heroName$ '
  558.                 LOCATE 11 + (i% * 3), 37 '
  559.                 PRINT tmpString$ '
  560.                 _PUTIMAGE (252, 142 + (i% * 48)), calculateHeroImg&(inputNumber%, inputNumber2%) '
  561.             ELSE
  562.                 PRINT "Empty slot" '
  563.             END IF
  564.         NEXT i% '
  565.  
  566.         _PUTIMAGE (Finger.x, Finger.y), FingerImg&(1)
  567.         _DISPLAY
  568.     LOOP UNTIL leaving% = 1
  569.     CHDIR ".\.." ' back to data
  570.     CHDIR ".\tmp" 'and then to tmp
  571. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  572. SUB saveGame () 'INCOMPLETE
  573.     drawMenuBack 247, 99, 391, 274
  574.     LOCATE 8, 36 '    ¿ TITLE
  575.     PRINT "SAVE  GAME"; ' Ù
  576. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  577. SUB helpMenu () ' INCOMPLETE
  578.     LOCATE 1, 1
  579.     PRINT "How to play"
  580.  
  581. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  582. SUB chooseClass ()
  583.     DIM i% ' ¿ LOCALS
  584.     DIM ii%
  585.     DO
  586.         _LIMIT 60
  587.         getMouseData
  588.         CLS , GREEN3 'all screen clear on green3
  589.         drawMenuBack 240, 99, 398, 280
  590.         LOCATE 8, 35 '                                               ¿ TITLE
  591.         PRINT "CHOOSE CLASS"; ' Barbarian, Clerig, Assasin or Wizard Ù
  592.         FOR i% = 0 TO 3: drawItemSlots 252 + i% * 34, 139: NEXT i% ' slots for hero images
  593.         _PUTIMAGE (252, 139), HeroImg&(0) ' Barbarian ¿
  594.         _PUTIMAGE (286, 139), HeroImg&(2) ' Clerig    ³ characters
  595.         _PUTIMAGE (320, 139), HeroImg&(4) ' Assasin   ³ images
  596.         _PUTIMAGE (354, 139), HeroImg&(6) ' Wizard    Ù
  597.         LOCATE 14, 33: PRINT "Strength"; '¿ static
  598.         LOCATE 15, 34: PRINT "Agility"; ' ³ ATRIBUTTE
  599.         LOCATE 16, 36: PRINT "Power"; '   ³ WORDS
  600.         LOCATE 17, 36: PRINT "Vigor"; '   Ù
  601.         FOR i% = 0 TO 3 '                                             ¿
  602.             _PUTIMAGE (327, i% * 16 + 212), BarImg&(0) ' open         ³
  603.             _PUTIMAGE (367, i% * 16 + 212), BarImg&(6) ' close        ³ static
  604.             FOR ii% = 0 TO 3 '                                        ³ BARS
  605.                 _PUTIMAGE (ii% * 8 + 335, i% * 16 + 212), BarImg&(5)
  606.             NEXT ii% '                                                ³
  607.         NEXT i% '                                                     Ù
  608.         IF fingerIsOnSurface%(252, 139, 32, 32) THEN '    ¿
  609.             LOCATE 13, 37 '                               ³
  610.             PRINT "Barbarian"; '                          ³
  611.             barShowingPercentage 327, 212, 100 'STRENGTH  ³
  612.             barShowingPercentage 327, 228, 50 'AGILITY    ³ BARBARIAN
  613.             barShowingPercentage 327, 244, 25 'POWER      ³
  614.             barShowingPercentage 327, 260, 75 ' VIGOR     ³
  615.             IF Finger.clickL THEN Hero.class = 0 '        ¾
  616.         ELSEIF fingerIsOnSurface%(286, 139, 32, 32) THEN '¿
  617.             LOCATE 13, 38 '                               ³
  618.             PRINT "Clerig"; '                             ³
  619.             barShowingPercentage 327, 212, 75 'STRENGTH   ³
  620.             barShowingPercentage 327, 228, 25 'AGILITY    ³ CLERIG
  621.             barShowingPercentage 327, 244, 50 'POWER      ³
  622.             barShowingPercentage 327, 260, 100 ' VIGOR    ³
  623.             IF Finger.clickL THEN Hero.class = 1 '        ¾
  624.         ELSEIF fingerIsOnSurface%(320, 139, 32, 32) THEN '¿
  625.             LOCATE 13, 38 '                               ³
  626.             PRINT "Assasin"; '                            ³
  627.             barShowingPercentage 327, 212, 50 'STRENGTH   ³
  628.             barShowingPercentage 327, 228, 100 'AGILITY   ³ ASSASIN
  629.             barShowingPercentage 327, 244, 25 'POWER      ³
  630.             barShowingPercentage 327, 260, 75 ' VIGOR     ³
  631.             IF Finger.clickL THEN Hero.class = 2 '        ¾
  632.         ELSEIF fingerIsOnSurface%(354, 139, 32, 32) THEN '¿
  633.             LOCATE 13, 38 '                               ³
  634.             PRINT "Wizard"; '                             ³
  635.             barShowingPercentage 327, 212, 25 'STRENGTH   ³
  636.             barShowingPercentage 327, 228, 50 'AGILITY    ³ WIZARD
  637.             barShowingPercentage 327, 244, 100 'POWER     ³
  638.             barShowingPercentage 327, 260, 75 ' VIGOR     ³
  639.             IF Finger.clickL THEN Hero.class = 3 '        ³
  640.         END IF '                                          ¾
  641.         _PUTIMAGE (Finger.x - 1, Finger.y - 1), FingerImg&(1) ' show finger
  642.         _DISPLAY
  643.     LOOP UNTIL Hero.class <> -1 ' leave when we have a class
  644. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - - -
  645. SUB enterName () '
  646.     DIM playerChoosingName$ '¿
  647.     DIM suffixForName$ '     ³
  648.     DIM KEY$ '               ³ LOCALS
  649.     DIM i% '                 ³
  650.     DIM ii% '                Ù
  651.     Hero.id = "" '             ¿ get ready for recive
  652.     playerChoosingName$ = "" ' Ù something
  653.     suffixForName$ = "the "
  654.     SELECT CASE Hero.class ' Hero.class in words                ¿
  655.         CASE 0: suffixForName$ = suffixForName$ + "Barbarian" ' ³
  656.         CASE 1: suffixForName$ = suffixForName$ + "Clerig" '    ³
  657.         CASE 2: suffixForName$ = suffixForName$ + "Assasin" '   ³ we already have
  658.         CASE 3: suffixForName$ = suffixForName$ + "Wizard" '    ³ an rpg class ;)
  659.     END SELECT '                                                ³
  660.     ii% = 40 - (LEN(suffixForName$) \ 2) ' center it            Ù
  661.     DO
  662.         _LIMIT 60
  663.         getMouseData
  664.         CLS , GREEN3 'all screen clear on green3
  665.         drawMenuBack 240, 99, 398, 274
  666.         LOCATE 8, 34 '              ¿ TITLE
  667.         PRINT "ENTER YOUR NAME"; '  Ù
  668.         drawItemSlots 303, 139 ' slot for hero image
  669.         SELECT CASE Hero.class ' images of possible hero chosen
  670.             CASE 0: _PUTIMAGE (303, 139), HeroImg&(0)
  671.             CASE 1: _PUTIMAGE (303, 139), HeroImg&(2)
  672.             CASE 2: _PUTIMAGE (303, 139), HeroImg&(4)
  673.             CASE 3: _PUTIMAGE (303, 139), HeroImg&(6)
  674.         END SELECT '
  675.         LOCATE 12, 32 '               ¿ print
  676.         PRINT "This story begins"; '  ³ text pre
  677.         LOCATE 13, 32 '               ³ name
  678.         PRINT "with a hero called"; ' Ù
  679.         KEY$ = INKEY$ ' get the key                                                                                                                     ¿
  680.         IF KEY$ <> "" THEN '                                                                                                                            ³
  681.             ' write                                                                                                                                     ³
  682.             IF LEN(playerChoosingName$) < 11 THEN '                                                                                                     ³ keyboard
  683.                 IF ((ASC(KEY$) > 96 AND ASC(KEY$) < 123)) THEN playerChoosingName$ = playerChoosingName$ + KEY$ '                                       ³ inputs
  684.             END IF '                                                                                                                                    ³ for this
  685.             IF LEN(playerChoosingName$) > 0 THEN ' if the name has at least one character                                                               ³ particular
  686.                 IF LEN(playerChoosingName$) = 1 THEN playerChoosingName$ = UCASE$(playerChoosingName$) 'capitalize the first one                        ³
  687.                 IF ASC(KEY$) = 8 THEN playerChoosingName$ = LEFT$(playerChoosingName$, LEN(playerChoosingName$) - 1) ' if backspace erease one letter   ³ menu
  688.                 IF ASC(KEY$) = 13 THEN Hero.id = playerChoosingName$ ' confirm name                                                                     ³
  689.             END IF '                                                                                                                                    ³
  690.         END IF '                                                                                                                                        Ù
  691.         i% = 40 - (LEN(playerChoosingName$) \ 2) '¿ print the name
  692.         LOCATE 14, i% '                           ³ the player is
  693.         PRINT playerChoosingName$; "_"; '         Ù actually writing
  694.         LOCATE 15, ii% '       ¿ print
  695.         PRINT suffixForName$; 'Ù "the " + Hero.class as words
  696.         _PUTIMAGE (287, 245), FingerImg&(5) ' GO ¿ print
  697.         _PUTIMAGE (335, 245), FingerImg&(0) ' X  Ù "buttons"
  698.         IF Finger.clickL THEN ' when u click                                                ¿
  699.             IF LEN(playerChoosingName$) > 0 THEN ' and some name has been written           ³
  700.                 ' if finger position ok, then confirm name                                  ³ mouse click
  701.                 IF fingerIsOnSurface%(287, 245, 16, 16) THEN Hero.id = playerChoosingName$ '³ inputs in
  702.             END IF '                                                                        ³ this particular
  703.             ' if u click on the cross erease the pre-name                                   ³ menu
  704.             IF fingerIsOnSurface(335, 245, 16, 16) THEN playerChoosingName$ = "" '          ³
  705.         END IF '                                                                            Ù
  706.         _PUTIMAGE (Finger.x - 1, Finger.y - 1), FingerImg&(1) ' show finger
  707.         _DISPLAY
  708.     LOOP UNTIL Hero.id <> "" ' leave here when we have a name
  709. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  710. SUB lookInPocket () 'what about in case of commerce or chest, bag, bones, etc....????
  711.  
  712.     drawMenuBack 320, 32, 639, 383 ' POCKET & EQUIPED
  713.     drawMenuBack 0, 384, 639, 479 ' ITEM INFO
  714.  
  715.     LOCATE 5, 48 '
  716.     PRINT "POCKET"; '
  717.     LOCATE 5, 67 '
  718.     PRINT "EQUIPPED"; '
  719.  
  720.     _PUTIMAGE (328, 40), HUDImg&(3)
  721.     IF fingerIsOnSurface%(328, 40, 16, 16) AND inHand.lvl = -1 THEN
  722.         HUDpromt$ = "Back to game"
  723.         IF Finger.clickL THEN menuPocket` = FALSE
  724.     END IF
  725.  
  726.     FOR i% = 0 TO 22
  727.         drawItemSlots Pocket(i%).x, Pocket(i%).y ' POCKET & EQUIPPED slots draw
  728.     NEXT i%
  729.  
  730.     LINE (480, 64)-(480, 351), GREEN1 ' divisory line
  731.  
  732.     FOR i% = 0 TO 22
  733.         IF fingerIsOnSurface(Pocket(i%).x, Pocket(i%).y, 32, 32) THEN itemInformation i% ' if mouse over an item inform
  734.     NEXT i%
  735.  
  736.  
  737.     drawItemsInPocket
  738. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  739. SUB selectSomeSpell () ' INCOMPLETE
  740.  
  741.     DIM i%, j%, x%, y%
  742.  
  743.     drawMenuBack 320, 32, 639, 383
  744.     drawMenuBack 0, 384, 639, 479 ' spell info board
  745.     LOCATE 5, 58: PRINT "SPELLS";
  746.     x% = 409
  747.     y% = 120
  748.     FOR i% = 0 TO 1
  749.         FOR j% = 0 TO 2
  750.             drawItemSlots x% + (j% * 54), y% + (i% * 54)
  751.         NEXT j%
  752.     NEXT i%
  753.     IF SpellsIknow%%(0) > 0 THEN _PUTIMAGE (409, 120), SpellImg&(0)
  754.     IF SpellsIknow%%(1) > 0 THEN _PUTIMAGE (463, 120), SpellImg&(1)
  755.     IF SpellsIknow%%(2) > 0 THEN _PUTIMAGE (517, 120), SpellImg&(2)
  756.     IF SpellsIknow%%(3) > 0 THEN _PUTIMAGE (409, 174), SpellImg&(3)
  757.     IF SpellsIknow%%(4) > 0 THEN _PUTIMAGE (463, 174), SpellImg&(4)
  758.     IF SpellsIknow%%(5) > 0 THEN _PUTIMAGE (517, 174), SpellImg&(5)
  759.  
  760.  
  761.     LOCATE 17, 59: PRINT "WAND";
  762.     drawItemSlots 447, 286
  763.     LOCATE 19, 62: PRINT "CHARGES";
  764.     LOCATE 20, 62
  765.     IF Pocket(2).kind = 15 THEN
  766.         IF INSTR(Pocket(2).special, "0") THEN
  767.             _PUTIMAGE (447, 286), SpellImg&(0)
  768.         ELSEIF INSTR(Pocket(2).special, "1") THEN
  769.             _PUTIMAGE (447, 286), SpellImg&(1)
  770.         ELSEIF INSTR(Pocket(2).special, "2") THEN
  771.             _PUTIMAGE (447, 286), SpellImg&(2)
  772.         ELSEIF INSTR(Pocket(2).special, "3") THEN
  773.             _PUTIMAGE (447, 286), SpellImg&(3)
  774.         ELSEIF INSTR(Pocket(2).special, "4") THEN
  775.             _PUTIMAGE (447, 286), SpellImg&(4)
  776.         ELSEIF INSTR(Pocket(2).special, "5") THEN
  777.             _PUTIMAGE (447, 286), SpellImg&(5)
  778.         END IF
  779.         PRINT _TRIM$(STR$(Pocket(2).ammount - 1)) + "/" + _TRIM$(STR$(calculateWandMaxCharges%(Pocket(2).lvl)))
  780.     ELSE
  781.         PRINT "-/-"
  782.     END IF
  783.  
  784.     _PUTIMAGE (328, 40), HUDImg&(3)
  785.     IF fingerIsOnSurface%(328, 40, 16, 16) AND inHand.lvl = -1 AND NOT menuMain` THEN
  786.         HUDpromt$ = "Back to game"
  787.         IF Finger.clickL THEN menuSpells` = FALSE
  788.     END IF
  789.  
  790. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  791. FUNCTION calculateNameOfHeroClass$ (heroClass%)
  792.     SELECT CASE heroClass%
  793.         CASE 0: calculateNameOfHeroClass$ = "Barbarian"
  794.         CASE 1: calculateNameOfHeroClass$ = "Clerig"
  795.         CASE 2: calculateNameOfHeroClass$ = "Assasin"
  796.         CASE 3: calculateNameOfHeroClass$ = "Wizard"
  797.     END SELECT
  798. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  799. SUB showTheStats () ' STILL HAVE TO: !!!ARROW FOR UPGRADING CAN'T APPEAR IF WE REACHED TOP OF SKILL FOR CLASS!!!!
  800.  
  801.     drawMenuBack 0, 32, 319, 383 '
  802.     'drawMenuBack 0, 384, 639, 479 ' ITEM
  803.     LOCATE 5, 18 '  ¿ TITLE
  804.     PRINT "STATS";
  805.  
  806.     _PUTIMAGE (297, 40), HUDImg&(3)
  807.     IF fingerIsOnSurface%(297, 40, 16, 16) AND inHand.lvl = -1 THEN
  808.         HUDpromt$ = "Back to game"
  809.         IF Finger.clickL THEN menuStats` = FALSE
  810.     END IF
  811.  
  812.     drawItemSlots 64, 96: _PUTIMAGE (64, 96), calculateHeroImg&(Hero.class, Hero.lvl)
  813.     drawItemSlots 144, 96: _PUTIMAGE (144, 104), LvlImg&(0): _PUTIMAGE (160, 104), LvlImg&(Hero.lvl)
  814.  
  815.     LOCATE 7, 28: PRINT Hero.id;
  816.     LOCATE 8, 28: PRINT calculateNameOfHeroClass$(Hero.class)
  817.  
  818.  
  819.     LOCATE 10, 19: PRINT "BASE NOW";
  820.  
  821.     'BASE
  822.     LOCATE 11, 12: PRINT "STRENGTH"; Hero.strength;
  823.     LOCATE 12, 13: PRINT "AGILITY"; Hero.agility;
  824.     LOCATE 13, 15: PRINT "POWER"; Hero.power;
  825.     LOCATE 14, 15: PRINT "VIGOR"; Hero.vigor;
  826.  
  827.     LOCATE 17, 6: PRINT "DAMAGE " + _TRIM$(STR$(calculateHeroBaseDmg%)) + " - " + _TRIM$(STR$(calculateHeroMaxDmg%));
  828.     LOCATE 17, 25: PRINT "TO HIT %"; calculateHeroChanceToHit%;
  829.     LOCATE 19, 17: PRINT "DEFENSE"; calculateHeroDefense%;
  830.     LOCATE 22, 14: PRINT "POINTS TO ADD"; Hero.attributePoints;
  831.  
  832.     IF Hero.attributePoints > 0 THEN ' if you have points
  833.  
  834.         _PUTIMAGE (184, 160), DirArrowImg&(4) ' strength         ¿
  835.         IF fingerIsOnSurface%(184, 160, 16, 16) THEN '           ³
  836.             printHUDpromt "Increase your strength" '             ³
  837.             IF Finger.clickL THEN '                              ³
  838.                 Hero.strength = Hero.strength + 1 '              ³
  839.                 Hero.attributePoints = Hero.attributePoints - 1
  840.             END IF '                                             ³
  841.         END IF '                                                 ³
  842.         _PUTIMAGE (184, 176), DirArrowImg&(4) ' agility          ³
  843.         IF fingerIsOnSurface%(184, 176, 16, 16) THEN '           ³
  844.             printHUDpromt "Increase your agility" '              ³
  845.             IF Finger.clickL THEN '                              ³
  846.                 Hero.agility = Hero.agility + 1 '                ³ ARROWS
  847.                 Hero.attributePoints = Hero.attributePoints - 1 '³ FOR
  848.             END IF '                                             ³ UPGRADING  <---------------Need to make functions for checking topStrength, topPower, etc... calculateHeroTopVigor
  849.         END IF '                                                 ³ SKILLS
  850.         _PUTIMAGE (184, 192), DirArrowImg&(4) ' power            ³
  851.         IF fingerIsOnSurface%(184, 192, 16, 16) THEN '           ³
  852.             printHUDpromt "Increase your power" '                ³
  853.             IF Finger.clickL THEN '                              ³
  854.                 Hero.power = Hero.power + 1 '                    ³
  855.                 Hero.attributePoints = Hero.attributePoints - 1
  856.             END IF '                                             ³
  857.         END IF '                                                 ³
  858.         _PUTIMAGE (184, 208), DirArrowImg&(4) ' vigor            ³
  859.         IF fingerIsOnSurface%(184, 208, 16, 16) THEN '           ³
  860.             printHUDpromt "Increase your vigor" '                ³
  861.             IF Finger.clickL THEN '                              ³
  862.                 Hero.vigor = Hero.vigor + 1 '                    ³
  863.                 Hero.attributePoints = Hero.attributePoints - 1
  864.             END IF '                                             ³
  865.         END IF '                                                 ¾
  866.     ELSE
  867.         'NOW
  868.         LOCATE 11, 23: PRINT calculateHeroActualStrength%;
  869.         LOCATE 12, 23: PRINT calculateHeroActualAgility%;
  870.         LOCATE 13, 23: PRINT calculateHeroActualPower%;
  871.         LOCATE 14, 23: PRINT calculateHeroActualVigor%;
  872.     END IF
  873.     LINE (179, 146)-(179, 219), GREEN1 ' separation line between BASE & NOW
  874.  
  875. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  876.  
  877. SUB lookAtMap () ' INCOMPLETE
  878.     drawMenuBack 16, 48, 624, 464
  879.     LOCATE 4, 38
  880.     PRINT "MAP"
  881.     'closeWindowButton 608, 52
  882. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  883.  
  884. SUB cleanYourHand () '°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°Û ITEMS Û°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
  885.     inHand.kind = -1
  886.     inHand.lvl = -1
  887.     inHand.ammount = 0
  888.     inHand.special = ""
  889. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  890. FUNCTION lookForSpaceInPocket% ()
  891.     DIM i%
  892.     FOR i% = 7 TO 22
  893.         IF Pocket(i%).kind = -1 THEN lookForSpaceInPocket% = i%: EXIT FUNCTION
  894.     NEXT i%
  895.     lookForSpaceInPocket% = FALSE
  896. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  897. SUB clearPocket ()
  898.     FOR i% = 0 TO 22
  899.         Pocket(i%).kind = -1
  900.         Pocket(i%).lvl = -1
  901.         Pocket(i%).ammount = 0
  902.         Pocket(i%).special = ""
  903.     NEXT i%
  904. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  905. SUB createItemInPocket (kind%, lvl%, ammount%, slot%, special$)
  906.     Pocket(slot%).kind = kind%
  907.     Pocket(slot%).lvl = lvl%
  908.     Pocket(slot%).ammount = ammount%
  909.     Pocket(slot%).special = special$
  910. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  911. SUB cleanOnePocketSlot (indexOfSlot%)
  912.     Pocket(indexOfSlot%).kind = -1
  913.     Pocket(indexOfSlot%).lvl = -1
  914.     Pocket(indexOfSlot%).ammount = 0
  915.     Pocket(indexOfSlot%).special = ""
  916. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  917. SUB drawItemsOnGround ()
  918.     FOR i% = 0 TO UBOUND(Items)
  919.         IF Items(i%).map = actualmapworking% THEN
  920.             _PUTIMAGE (Items(i%).x + 8, Items(i%).y + 8), calculateItemOnGroundImage&(Items(i%).kind)
  921.         END IF
  922.     NEXT i%
  923. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  924. SUB drawItemsInPocket ()
  925.     FOR i% = 0 TO 22
  926.         _PUTIMAGE (Pocket(i%).x, Pocket(i%).y), calculateItemImage&(Pocket(i%).kind, Pocket(i%).lvl)
  927.     NEXT i%
  928.     _PUTIMAGE (inHand.x - 16, inHand.y - 16), calculateItemImage&(inHand.kind, inHand.lvl)
  929. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  930. FUNCTION calculateItemOnGroundImage& (k%)
  931.     calculateItemOnGroundImage& = GndItemsImg&(k%)
  932. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  933. FUNCTION calculateItemImage& (kind%, lvl%) 'TO DO:case 18= history or special related items
  934.     SELECT CASE kind%
  935.         CASE -1: calculateItemImage& = BlankImg&
  936.         CASE 0: calculateItemImage& = KeyImg&(lvl%)
  937.         CASE 1: calculateItemImage& = PotionImg&(lvl%)
  938.         CASE 2: calculateItemImage& = PaperImg&(lvl%)
  939.         CASE 3: calculateItemImage& = BookImg&(lvl%)
  940.         CASE 4: calculateItemImage& = SwordImg&(lvl%)
  941.         CASE 5: calculateItemImage& = AxeImg&(lvl%)
  942.         CASE 6: calculateItemImage& = ThrowImg&(lvl%)
  943.         CASE 7: calculateItemImage& = BowImg&(lvl%)
  944.         CASE 8: calculateItemImage& = CrossbowImg&(lvl%)
  945.         CASE 9: calculateItemImage& = BombImg&(lvl%)
  946.         CASE 10: calculateItemImage& = ArrowImg&(lvl%)
  947.         CASE 11: calculateItemImage& = BoltImg&(lvl%)
  948.         CASE 12: calculateItemImage& = ArmorImg&(lvl%)
  949.         CASE 13: calculateItemImage& = HelmImg&(lvl%)
  950.         CASE 14: calculateItemImage& = ShieldImg&(lvl%)
  951.         CASE 15: calculateItemImage& = WandImg&(lvl%)
  952.         CASE 16: calculateItemImage& = MoneyImg&(lvl%)
  953.         CASE 17: calculateItemImage& = BijouImg&(lvl%)
  954.             'CASE 18: calculateItemImage& = WonderImg&(lvl%)
  955.     END SELECT
  956. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -.
  957. SUB actualizeMoneyAspect ()
  958.     FOR i% = 7 TO 22 '
  959.         IF Pocket(i%).kind = 16 AND Pocket(i%).lvl < 2 THEN '
  960.             IF Pocket(i%).ammount > 249 THEN '
  961.                 Pocket(i%).lvl = 1 '
  962.             ELSE '
  963.                 Pocket(i%).lvl = 0 '
  964.             END IF '
  965.         END IF '
  966.     NEXT i% '
  967.     IF inHand.kind = 16 AND inHand.lvl < 2 THEN '
  968.         IF inHand.ammount > 249 THEN '
  969.             inHand.lvl = 1 '
  970.         ELSE '
  971.             inHand.lvl = 0 '
  972.         END IF '
  973.     END IF '
  974. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  975. FUNCTION calculateWandMaxCharges% (lvl%)
  976.     calculateWandMaxCharges% = 20 + (lvl% * 5)
  977. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  978. FUNCTION calculateItemDefense% (kind%, lvl%, special$) 'TO DO:balance the game
  979.     DIM tmp%
  980.     tmp% = 0
  981.     SELECT CASE kind%
  982.         CASE 12: tmp% = 3 + 3 * lvl% ' ARMORS
  983.         CASE 13: tmp% = 1 + 1 * lvl% ' HELMS
  984.         CASE 14: tmp% = 2 + 2 * lvl% ' SHIELDS
  985.     END SELECT
  986.     IF special$ <> "" THEN
  987.         IF INSTR(special$, "d") THEN
  988.             tmp% = tmp% + VAL(RIGHT$(special$, 1))
  989.         END IF
  990.     END IF
  991.     calculateItemDefense% = tmp%
  992. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  993. FUNCTION calculateItemBaseDmg% (kind%, lvl%, special$) 'TO DO:balance the game
  994.     DIM tmp%
  995.     tmp% = 0
  996.     SELECT CASE kind%
  997.         CASE 4: tmp% = (lvl% + 1) * 2 '     SWORDS
  998.         CASE 5: tmp% = (lvl% + 1) * 3 '     AXES
  999.         CASE 6: tmp% = (lvl% + 1) '         THROWS
  1000.         CASE 7: tmp% = (lvl% + 1) * 2 '     BOWS
  1001.         CASE 8: tmp% = (lvl% + 1) * 3 '     CROSSBOWS
  1002.         CASE 9: tmp% = (lvl% + 1) * 15 '    BOMBS
  1003.         CASE 10: tmp% = (lvl% + 1) * 2 '    ARROWS
  1004.         CASE 11: tmp% = (lvl% + 1) * 3 '    BOLTS
  1005.         CASE 15: tmp% = (lvl% + 1) '        WANDS
  1006.     END SELECT
  1007.     IF special$ <> "" THEN
  1008.         IF INSTR(special$, "b") THEN
  1009.             tmp% = tmp% + VAL(RIGHT$(special$, 1))
  1010.         END IF
  1011.     END IF
  1012.     calculateItemBaseDmg% = tmp%
  1013. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1014. FUNCTION calculateItemMaxDmg% (kind%, lvl%, special$) 'TO DO: balance the game
  1015.     DIM k%
  1016.     DIM l%
  1017.     DIM s$
  1018.     DIM tmp%
  1019.     k% = kind%
  1020.     l% = lvl%
  1021.     s$ = special$
  1022.     SELECT CASE kind%
  1023.         CASE 4: tmp% = calculateItemBaseDmg%(k%, l%, s$) + 3 '              SWORDS
  1024.         CASE 5: tmp% = calculateItemBaseDmg%(k%, l%, s$) + 4 '              AXES
  1025.         CASE 6: tmp% = calculateItemBaseDmg%(k%, l%, s$) + 1 '              THROWS
  1026.         CASE 7: tmp% = calculateItemBaseDmg%(k%, l%, s$) + 2 '              BOWS
  1027.         CASE 8: tmp% = calculateItemBaseDmg%(k%, l%, s$) + 3 '              CROSSBOWS
  1028.         CASE 9: tmp% = calculateItemBaseDmg%(k%, l%, s$) + (l% + 1) * 5 '   BOMBS
  1029.         CASE 10: tmp% = calculateItemBaseDmg%(k%, l%, s$) + 1 '             ARROWS
  1030.         CASE 11: tmp% = calculateItemBaseDmg%(k%, l%, s$) + 2 '             BOLTS
  1031.         CASE 15: tmp% = calculateItemBaseDmg%(k%, l%, s$) + 1 '             WANDS
  1032.     END SELECT
  1033.     IF s$ <> "" THEN
  1034.         IF INSTR(s$, "m") THEN
  1035.             tmp% = tmp% + VAL(RIGHT$(s$, 1))
  1036.         END IF
  1037.     END IF
  1038.     calculateItemMaxDmg% = tmp%
  1039. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1040. FUNCTION nameAnItem$ (kind%, lvl%, special$) 'TO DO:case 18=history related items, scroll names?
  1041.  
  1042.     DIM tmp$
  1043.  
  1044.     SELECT CASE kind%
  1045.         CASE -1 ' nothing
  1046.             tmp$ = ""
  1047.         CASE 0 '  KEYS
  1048.             SELECT CASE lvl%
  1049.                 CASE 0: tmp$ = "Tiny"
  1050.                 CASE 1: tmp$ = "Elegant"
  1051.                 CASE 2: tmp$ = "Rare"
  1052.                 CASE 3: tmp$ = "Heavy"
  1053.                 CASE 4: tmp$ = "Criptyc"
  1054.                 CASE 5: tmp$ = "Twisted"
  1055.             END SELECT
  1056.             tmp$ = tmp$ + " key"
  1057.         CASE 1 '  POTIONS
  1058.             SELECT CASE lvl% '
  1059.                 CASE 0: tmp$ = "Minor"
  1060.                 CASE 1: tmp$ = "Light"
  1061.                 CASE 2: tmp$ = "Small"
  1062.                 CASE 3: tmp$ = "Medium"
  1063.                 CASE 4: nameAnItem$ = "Potion": EXIT FUNCTION
  1064.                 CASE 5: tmp$ = "Large"
  1065.                 CASE 6: tmp$ = "Big"
  1066.                 CASE 7: tmp$ = "Full"
  1067.             END SELECT
  1068.             tmp$ = tmp$ + " potion"
  1069.         CASE 2 '  PAPERS
  1070.             SELECT CASE lvl%
  1071.                 CASE 0: tmp$ = "Scroll"
  1072.                 CASE 1: tmp$ = "Map"
  1073.             END SELECT
  1074.         CASE 3 '  BOOKS
  1075.             SELECT CASE lvl%
  1076.                 CASE 0: tmp$ = "Ancient book"
  1077.                 CASE 1: tmp$ = "Old book"
  1078.                 CASE 2: tmp$ = "Tome"
  1079.                 CASE 3: tmp$ = "Enciclopedy"
  1080.             END SELECT
  1081.         CASE 4 '  SWORDS
  1082.             SELECT CASE lvl%
  1083.                 CASE 0: tmp$ = "Small"
  1084.                 CASE 1: tmp$ = "Curve"
  1085.                 CASE 2: tmp$ = "Templed"
  1086.                 CASE 3: tmp$ = "Medium"
  1087.                 CASE 4: nameAnItem$ = "Sabre" + itemSpecialSuffix$(special$): EXIT FUNCTION
  1088.                 CASE 5: tmp$ = "Sharpened"
  1089.                 CASE 6: tmp$ = "Celestial"
  1090.                 CASE 7: tmp$ = "Demoniac"
  1091.             END SELECT
  1092.             tmp$ = tmp$ + " sword"
  1093.         CASE 5 '  AXES
  1094.             SELECT CASE lvl%
  1095.                 CASE 0: tmp$ = "Bushcraft"
  1096.                 CASE 1: tmp$ = "Small"
  1097.                 CASE 2: nameAnItem$ = "Bardiche" + itemSpecialSuffix$(special$): EXIT FUNCTION
  1098.                 CASE 3: tmp$ = "Medium"
  1099.                 CASE 4: tmp$ = "Double"
  1100.                 CASE 5: tmp$ = "Sharp double"
  1101.                 CASE 6: tmp$ = "War"
  1102.                 CASE 7: tmp$ = "Demoniac"
  1103.             END SELECT
  1104.             tmp$ = tmp$ + " axe"
  1105.         CASE 6 '  THROWS
  1106.             SELECT CASE lvl%
  1107.                 CASE 0: tmp$ = "Light"
  1108.                 CASE 1: tmp$ = "Heavy"
  1109.                 CASE 2: nameAnItem$ = "Throwin knives": EXIT FUNCTION
  1110.             END SELECT
  1111.             tmp$ = tmp$ + " shurikens"
  1112.         CASE 7 '  BOWS
  1113.             SELECT CASE lvl%
  1114.                 CASE 0: tmp$ = "Hunter"
  1115.                 CASE 1: tmp$ = "Composite"
  1116.                 CASE 2: tmp$ = "War"
  1117.             END SELECT
  1118.             tmp$ = tmp$ + " bow"
  1119.         CASE 8 '  CROSSBOWS
  1120.             SELECT CASE lvl%
  1121.                 CASE 0: tmp$ = "Light"
  1122.                 CASE 1: tmp$ = "Heavy"
  1123.             END SELECT
  1124.             tmp$ = tmp$ + " crossbow"
  1125.         CASE 9 '  BOMBS
  1126.             SELECT CASE lvl%
  1127.                 CASE 0: tmp$ = "Small"
  1128.                 CASE 1: tmp$ = "Medium"
  1129.                 CASE 2: tmp$ = "Large"
  1130.             END SELECT
  1131.             tmp$ = tmp$ + " bombs"
  1132.         CASE 10 ' ARROWS
  1133.             SELECT CASE lvl%
  1134.                 CASE 0: tmp$ = "Light"
  1135.                 CASE 1: tmp$ = "Sharp"
  1136.                 CASE 2: tmp$ = "Heavy"
  1137.             END SELECT
  1138.             tmp$ = tmp$ + " arrows"
  1139.         CASE 11 ' BOLTS
  1140.             SELECT CASE lvl%
  1141.                 CASE 0: tmp$ = "Light"
  1142.                 CASE 1: tmp$ = "Heavy"
  1143.             END SELECT
  1144.             tmp$ = tmp$ + " bolts"
  1145.         CASE 12 ' ARMORS
  1146.             SELECT CASE lvl%
  1147.                 CASE 0: nameAnItem$ = "Leather vest" + itemSpecialSuffix$(special$): EXIT FUNCTION
  1148.                 CASE 1: nameAnItem$ = "Leather armor" + itemSpecialSuffix$(special$): EXIT FUNCTION
  1149.                 CASE 2: nameAnItem$ = "Ring mail" + itemSpecialSuffix$(special$): EXIT FUNCTION
  1150.                 CASE 3: tmp$ = "Small"
  1151.                 CASE 4: tmp$ = "Medium"
  1152.                 CASE 5: tmp$ = "Heavy"
  1153.                 CASE 6: tmp$ = "War"
  1154.                 CASE 7: tmp$ = "Full"
  1155.             END SELECT
  1156.             tmp$ = tmp$ + " plate"
  1157.         CASE 13 ' HELMS
  1158.             SELECT CASE lvl%
  1159.                 CASE 0: tmp$ = "Small"
  1160.                 CASE 1: tmp$ = "Medium"
  1161.                 CASE 2: tmp$ = "Full"
  1162.                 CASE 3: nameAnItem$ = "Half helm" + itemSpecialSuffix$(special$): EXIT FUNCTION
  1163.                 CASE 4: nameAnItem$ = "Full helm" + itemSpecialSuffix$(special$): EXIT FUNCTION
  1164.                 CASE 5: nameAnItem$ = "Small Helmet" + itemSpecialSuffix$(special$): EXIT FUNCTION
  1165.                 CASE 6: nameAnItem$ = "Great healmet" + itemSpecialSuffix$(special$): EXIT FUNCTION
  1166.                 CASE 7: nameAnItem$ = "Hellking Crown" + itemSpecialSuffix$(special$): EXIT FUNCTION
  1167.             END SELECT
  1168.             tmp$ = tmp$ + " cap"
  1169.         CASE 14 ' SHIELDS
  1170.             SELECT CASE lvl%
  1171.                 CASE 0: tmp$ = "Small"
  1172.                 CASE 1: tmp$ = "Medium"
  1173.                 CASE 2: tmp$ = "Large"
  1174.                 CASE 3: tmp$ = "Great"
  1175.                 CASE 4: tmp$ = "Bronze"
  1176.                 CASE 5: tmp$ = "Iron"
  1177.                 CASE 6: tmp$ = "Steel"
  1178.                 CASE 7: tmp$ = "War"
  1179.             END SELECT
  1180.             tmp$ = tmp$ + " shield"
  1181.         CASE 15 ' WANDS
  1182.             SELECT CASE lvl%
  1183.                 CASE 0: tmp$ = "Apprentice"
  1184.                 CASE 1: tmp$ = "Initiate"
  1185.                 CASE 2: tmp$ = "Learner"
  1186.                 CASE 3: tmp$ = "Academic"
  1187.                 CASE 4: tmp$ = "Sacred"
  1188.                 CASE 5: tmp$ = "Dark"
  1189.                 CASE 6: tmp$ = "Egiptian"
  1190.                 CASE 7: tmp$ = "Voodoo"
  1191.             END SELECT
  1192.             tmp$ = tmp$ + " wand"
  1193.         CASE 16 ' MONEY
  1194.             SELECT CASE lvl%
  1195.                 CASE 0: tmp$ = "Coins"
  1196.                 CASE 1: tmp$ = "Many coins"
  1197.                 CASE 2: tmp$ = "Crude gemstones"
  1198.                 CASE 3: tmp$ = "Gemstone"
  1199.             END SELECT
  1200.         CASE 17 ' BIJOUTERY
  1201.             SELECT CASE lvl%
  1202.                 CASE 0: tmp$ = "Circlet"
  1203.                 CASE 1: tmp$ = "Ring"
  1204.                 CASE 2: tmp$ = "Said"
  1205.                 CASE 3: tmp$ = "Necklace"
  1206.             END SELECT
  1207.             'CASE 18 '
  1208.             '    SELECT CASE lvl%
  1209.             '        CASE 0: tmp$ = "Dyran crystals"
  1210.             '        CASE 1: tmp$ = "The Orb"
  1211.             '    END SELECT
  1212.     END SELECT
  1213.     nameAnItem$ = tmp$ + itemSpecialSuffix$(special$)
  1214. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1215. FUNCTION itemSpecialSuffix$ (s$)
  1216.  
  1217.     DIM tmp$
  1218.  
  1219.     IF s$ <> "" THEN
  1220.         IF INSTR(s$, "s") THEN ' adds to STR
  1221.             SELECT CASE VAL(RIGHT$(s$, 1))
  1222.                 CASE 1: tmp$ = "might"
  1223.                 CASE 2: tmp$ = "warriors"
  1224.                 CASE 3: tmp$ = "titans"
  1225.             END SELECT
  1226.         ELSEIF INSTR(s$, "a") THEN ' adds to AGI
  1227.             SELECT CASE VAL(RIGHT$(s$, 1))
  1228.                 CASE 1: tmp$ = "reflex"
  1229.                 CASE 2: tmp$ = "swiftness"
  1230.                 CASE 3: tmp$ = "martiality"
  1231.             END SELECT
  1232.         ELSEIF INSTR(s$, "p") THEN ' adds to PWR
  1233.             SELECT CASE VAL(RIGHT$(s$, 1))
  1234.                 CASE 1: tmp$ = "ilusionism"
  1235.                 CASE 2: tmp$ = "invocation"
  1236.                 CASE 3: tmp$ = "necromancy"
  1237.             END SELECT
  1238.         ELSEIF INSTR(s$, "v") THEN ' adds to VIG
  1239.             SELECT CASE VAL(RIGHT$(s$, 1))
  1240.                 CASE 1: tmp$ = "youthness"
  1241.                 CASE 2: tmp$ = "longevity"
  1242.                 CASE 3: tmp$ = "eternity"
  1243.             END SELECT
  1244.         ELSEIF INSTR(s$, "d") THEN ' adds to DEF
  1245.             SELECT CASE VAL(RIGHT$(s$, 1))
  1246.                 CASE 1: tmp$ = "protection"
  1247.                 CASE 2: tmp$ = "guardian"
  1248.                 CASE 3: tmp$ = "angels"
  1249.             END SELECT
  1250.         ELSEIF INSTR(s$, "m") THEN ' adds to MAX DMG
  1251.             SELECT CASE VAL(RIGHT$(s$, 1))
  1252.                 CASE 1: tmp$ = "fatality"
  1253.                 CASE 2: tmp$ = "brutality"
  1254.                 CASE 3: tmp$ = "animality"
  1255.             END SELECT
  1256.         ELSEIF INSTR(s$, "b") THEN ' adds to BASE DMG
  1257.             SELECT CASE VAL(RIGHT$(s$, 1))
  1258.                 CASE 1: tmp$ = "craftmanship"
  1259.                 CASE 2: tmp$ = "technicism"
  1260.                 CASE 3: tmp$ = "engineering"
  1261.             END SELECT
  1262.         ELSEIF INSTR(s$, "c") THEN ' adds to TO HIT%
  1263.             SELECT CASE VAL(RIGHT$(s$, 1))
  1264.                 CASE 1: tmp$ = "aiming"
  1265.                 CASE 2: tmp$ = "exactitud"
  1266.                 CASE 3: tmp$ = "precision"
  1267.             END SELECT
  1268.         ELSEIF INSTR(s$, "t") OR INSTR(s$, "r") THEN ' teaches or can cast some spell
  1269.             SELECT CASE VAL(RIGHT$(s$, 1))
  1270.                 CASE 0: tmp$ = "firebolt"
  1271.                 CASE 1: tmp$ = "blessing"
  1272.                 CASE 2: tmp$ = "infravision"
  1273.                 CASE 3: tmp$ = "teleport"
  1274.                 CASE 4: tmp$ = "healing"
  1275.                 CASE 5: tmp$ = "mana shield"
  1276.             END SELECT
  1277.         ELSEIF INSTR(s$, "u") THEN ' unidentified
  1278.             itemSpecialSuffix$ = " (Unidentified)": EXIT FUNCTION
  1279.         END IF
  1280.         itemSpecialSuffix$ = " of " + tmp$
  1281.     ELSE
  1282.         itemSpecialSuffix$ = ""
  1283.     END IF
  1284.  
  1285. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1286. SUB fromPocketToHand (slotIndex%)
  1287.     inHand.kind = Pocket(slotIndex%).kind
  1288.     inHand.lvl = Pocket(slotIndex%).lvl
  1289.     inHand.ammount = Pocket(slotIndex%).ammount
  1290.     inHand.special = Pocket(slotIndex%).special
  1291.     cleanOnePocketSlot slotIndex%
  1292. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1293. SUB fromHandToPocket (slotIndex%)
  1294.     Pocket(slotIndex%).kind = inHand.kind
  1295.     Pocket(slotIndex%).lvl = inHand.lvl
  1296.     Pocket(slotIndex%).ammount = inHand.ammount
  1297.     Pocket(slotIndex%).special = inHand.special
  1298.     cleanYourHand
  1299. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1300. SUB dropItemToGround ()
  1301.     REDIM _PRESERVE Items(UBOUND(items) + 1) AS OBJECT ' increase the Items array index by one
  1302.     Items(UBOUND(Items)).x = Hero.x '
  1303.     Items(UBOUND(Items)).y = Hero.y '
  1304.     Items(UBOUND(Items)).kind = inHand.kind '
  1305.     Items(UBOUND(Items)).lvl = inHand.lvl '
  1306.     Items(UBOUND(Items)).ammount = inHand.ammount '
  1307.     Items(UBOUND(Items)).special = inHand.special '
  1308.     Items(UBOUND(Items)).map = actualMapWorking%% '
  1309.     cleanYourHand
  1310. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1311. SUB pickItemFromGround (indexOfItem%)
  1312.     IF lookForSpaceInPocket% THEN '                                                 if theres place in your pocket
  1313.         IF indexOfItem% = UBOUND(Items) THEN '                                      and that item is the last one of the array
  1314.             Pocket(lookForSpaceInPocket%).kind = Items(idexOfItem%).kind '      ¿
  1315.             Pocket(lookForSpaceInPocket%).lvl = Items(idexOfItem%).lvl '        ³   Transfer the data of the item to
  1316.             Pocket(lookForSpaceInPocket%).ammount = Items(idexOfItem%).ammount '³   the free place on Pocket
  1317.             Pocket(lookForSpaceInPocket%).special = Items(idexOfItem%).special
  1318.             REDIM _PRESERVE Items(UBOUND(Items) - 1) AS OBJECT '                    and reduce the array by one (destroying the last one)
  1319.         ELSE ' but if the item is not the last one of the array
  1320.             Pocket(lookForSpaceInPocket%).kind = Items(idexOfItem%).kind '      ¿
  1321.             Pocket(lookForSpaceInPocket%).lvl = Items(idexOfItem%).lvl '        ³   Transfer the data of the item to
  1322.             Pocket(lookForSpaceInPocket%).ammount = Items(idexOfItem%).ammount '³   the free place on Pocket
  1323.             Pocket(lookForSpaceInPocket%).special = Items(idexOfItem%).special
  1324.             Items(indexOfItem%).x = Items(UBOUND(Items)).x '                    ¿
  1325.             Items(indexOfItem%).y = Items(UBOUND(Items)).y '                    ³
  1326.             Items(indexOfItem%).kind = Items(UBOUND(Items)).kind '              ³   copy all the data of the last item
  1327.             Items(indexOfItem%).lvl = Items(UBOUND(Items)).lvl '                ³   in the array to this index of the array,
  1328.             Items(indexOfItem%).ammount = Items(UBOUND(Items)).ammount '        ³   overwriting the item we just picked
  1329.             Items(indexOfItem%).special = Items(UBOUND(Items)).special '        ³
  1330.             Items(indexOfItem%).map = Items(UBOUND(Items)).map '                ¾
  1331.             REDIM _PRESERVE Items(UBOUND(Items) - 1) AS OBJECT '                    now we can eliminate the last item of the array (it has been copied to the picked item index)
  1332.         END IF
  1333.     ELSE '                                                                          if you have no room in pocket
  1334.         HUDpromt$ = "You have no room on your pocket" '                             you should be aware of it
  1335.     END IF
  1336. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1337. SUB itemManipulation () 'TO DO: reading scrolls
  1338.     DIM i%
  1339.     DIM special$
  1340.     DIM specialNum%
  1341.  
  1342.     FOR i% = 7 TO 22 ' INVENTORY
  1343.         IF fingerIsOnSurface%(Pocket(i%).x, Pocket(i%).y, 32, 32) THEN
  1344.             IF NOT itemRequirementsMet%(i%) THEN HUDpromt$ = "Requirements don't met"
  1345.             IF Finger.clickL AND (Pocket(i%).lvl <> -1 AND inHand.lvl = -1) THEN 'grabbing an item from a slot
  1346.                 fromPocketToHand i%
  1347.             ELSEIF Finger.clickL AND (Pocket(i%).lvl = -1 AND inHand.lvl <> -1) THEN 'droping an item into an empty slot
  1348.                 fromHandToPocket i%
  1349.             ELSEIF Finger.clickL AND inHand.lvl <> -1 AND Pocket(i%).kind = inHand.kind THEN 'trying to add multiple instances of the same thing
  1350.                 checkForAddingAmmounts i%
  1351.             END IF
  1352.             IF Finger.clickR THEN ' if RIGHT click
  1353.                 SELECT CASE Pocket(i%).kind
  1354.                     CASE 1 ' potions
  1355.                         SOUND 440, 1
  1356.                         Hero.life = Hero.life + (Pocket(i%).lvl + 1) * 5 ' increase helth ¿ DRINKING A POTION
  1357.                         cleanOnePocketSlot i% '                      and destroy the item ¾
  1358.                     CASE 2 ' papers
  1359.                         IF Pocket(i%).lvl = 1 THEN '¿
  1360.                             menuPocket` = FALSE '   ³ READING THE MAP
  1361.                             menuSpells` = FALSE '   ³
  1362.                             menuStats` = FALSE '    ³
  1363.                             menuMap` = TRUE '       ¾
  1364.                         ELSEIF Pocket(i%).lvl = 0 THEN '¿
  1365.                             '                           ³ TO DO: reading a scroll
  1366.                         END IF '                        ¾
  1367.  
  1368.                     CASE 3 'books
  1369.                         IF itemRequirementsMet%(i%) THEN
  1370.                             specialNum% = VAL(RIGHT$(Pocket(i%).special, 1)) 'convert the second digit of special into a value and the CASE SELECT it for adding 1 to the corrresponding spell, if is't less than 10
  1371.                             SELECT CASE specialNum%
  1372.                                 CASE 0: IF SpellsIknow%%(0) < 10 THEN SpellsIknow%%(0) = spellsiknow%% + 1
  1373.                                 CASE 1: IF SpellsIknow%%(1) < 10 THEN SpellsIknow%%(1) = spellsiknow%% + 1
  1374.                                 CASE 2: IF SpellsIknow%%(2) < 10 THEN SpellsIknow%%(2) = spellsiknow%% + 1
  1375.                                 CASE 3: IF SpellsIknow%%(3) < 10 THEN SpellsIknow%%(3) = spellsiknow%% + 1
  1376.                                 CASE 4: IF SpellsIknow%%(4) < 10 THEN SpellsIknow%%(4) = spellsiknow%% + 1
  1377.                                 CASE 5: IF SpellsIknow%%(5) < 10 THEN SpellsIknow%%(5) = spellsiknow%% + 1
  1378.                             END SELECT
  1379.                             cleanOnePocketSlot i% '                         and destroy the item
  1380.                         ELSE '                                              if requirements aren't met or spell is lvl 10 already
  1381.                             SOUND 220, 1 '                                  play "booooooo" sound
  1382.                         END IF
  1383.                 END SELECT
  1384.             END IF
  1385.         END IF
  1386.     NEXT i%
  1387.  
  1388.     FOR i% = 0 TO 6 ' EQUIPPED
  1389.         IF fingerIsOnSurface%(Pocket(i%).x, Pocket(i%).y, 32, 32) THEN
  1390.             IF Finger.clickL AND (Pocket(i%).lvl <> -1 AND inHand.lvl = -1) THEN
  1391.                 fromPocketToHand i% ' if LEFT click grab an item from a slot. No big deal on this
  1392.             ELSEIF Finger.clickL AND inHand.lvl <> -1 AND Pocket(i%).kind = inHand.kind AND Pocket(i%).lvl = inHand.lvl THEN 'trying to add multiple instances of the same thing
  1393.                 checkForAddingAmmounts i%
  1394.             ELSEIF Pocket(i%).lvl = -1 AND inHand.lvl <> -1 THEN 'droping an item into a slot needs to check and inform some things
  1395.                 IF itemFitsEquipmentSlot%(i%) THEN
  1396.                     IF itemRequirementsMet%(0) THEN
  1397.                         IF Finger.clickL THEN fromHandToPocket i%
  1398.                     ELSE
  1399.                         HUDpromt$ = "Requirements not met"
  1400.                     END IF
  1401.                 END IF
  1402.             END IF
  1403.         END IF
  1404.     NEXT i%
  1405.     IF Finger.clickL AND inHand.kind <> -1 AND fingerIsOnSurface%(0, 32, 319, 384) THEN dropItemToGround
  1406. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1407. SUB checkForAddingAmmounts (indexOfSlot%) ' in a single slot you can fir: 500 coins; 100 throws; 75 arrows, 50 bolts or 6 bombs
  1408.     DIM tmp1%
  1409.     IF Pocket(indexOfSlot%).lvl = inHand.lvl THEN
  1410.         SELECT CASE inHand.kind
  1411.             CASE 6 '                                                                                    throws
  1412.                 IF inHand.ammount + Pocket(indexOfSlot%).ammount > 100 THEN
  1413.                     tmp1% = 100 - Pocket(indexOfSlot%).ammount
  1414.                     Pocket(indexOfSlot%).ammount = Pocket(indexOfSlot%).ammount + tmp1%
  1415.                     inHand.ammount = inHand.ammount - tmp1%
  1416.                 ELSE
  1417.                     Pocket(indexOfSlot%).ammount = Pocket(indexOfSlot%).ammount + inHand.ammount
  1418.                     cleanYourHand
  1419.                 END IF
  1420.             CASE 9 '                                                                                    bombs
  1421.                 IF inHand.ammount + Pocket(indexOfSlot%).ammount > 6 THEN
  1422.                     tmp1% = 6 - Pocket(indexOfSlot%).ammount
  1423.                     Pocket(indexOfSlot%).ammount = Pocket(indexOfSlot%).ammount + tmp1%
  1424.                     inHand.ammount = inHand.ammount - tmp1%
  1425.                 ELSE
  1426.                     Pocket(indexOfSlot%).ammount = Pocket(indexOfSlot%).ammount + inHand.ammount
  1427.                     cleanYourHand
  1428.                 END IF
  1429.             CASE 10 '                                                                                   arrows
  1430.                 IF inHand.ammount + Pocket(indexOfSlot%).ammount > 75 THEN
  1431.                     tmp1% = 75 - Pocket(indexOfSlot%).ammount
  1432.                     Pocket(indexOfSlot%).ammount = Pocket(indexOfSlot%).ammount + tmp1%
  1433.                     inHand.ammount = inHand.ammount - tmp1%
  1434.                 ELSE
  1435.                     Pocket(indexOfSlot%).ammount = Pocket(indexOfSlot%).ammount + inHand.ammount
  1436.                     cleanYourHand
  1437.                 END IF
  1438.             CASE 11 '                                                                                   bolts
  1439.                 IF inHand.ammount + Pocket(indexOfSlot%).ammount > 50 THEN
  1440.                     tmp1% = 50 - Pocket(indexOfSlot%).ammount
  1441.                     Pocket(indexOfSlot%).ammount = Pocket(indexOfSlot%).ammount + tmp1%
  1442.                     inHand.ammount = inHand.ammount - tmp1%
  1443.                 ELSE
  1444.                     Pocket(indexOfSlot%).ammount = Pocket(indexOfSlot%).ammount + inHand.ammount
  1445.                     cleanYourHand
  1446.                 END IF
  1447.         END SELECT
  1448.     END IF
  1449.     IF inHand.kind = 16 AND inHand.lvl < 2 AND Pocket(indexOfSlot%).lvl < 2 THEN '                      money
  1450.         IF inHand.ammount + Pocket(indexOfSlot%).ammount > 500 THEN
  1451.             tmp1% = 500 - Pocket(indexOfSlot%).ammount
  1452.             Pocket(indexOfSlot%).ammount = Pocket(indexOfSlot%).ammount + tmp1%
  1453.             inHand.ammount = inHand.ammount - tmp1%
  1454.         ELSE
  1455.             Pocket(indexOfSlot%).ammount = Pocket(indexOfSlot%).ammount + inHand.ammount
  1456.             cleanYourHand
  1457.         END IF
  1458.     END IF
  1459. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1460. FUNCTION itemRequirementsMet% (P%)
  1461.     IF P% > 0 THEN '  0= HAND, other number=index of POCKET
  1462.         IF calculateHeroActualStrength% >= calculateItemReqStrength%(Pocket(P%).kind, Pocket(P%).lvl) _
  1463.         AND calculateHeroActualAgility% >= calculateItemReqAgility%(Pocket(P%).kind, Pocket(P%).lvl) _
  1464.         AND calculateHeroActualPower% >= calculateItemReqPower%(Pocket(P%).kind, Pocket(P%).lvl, Pocket(P%).special) THEN
  1465.             itemRequirementsMet% = TRUE: EXIT FUNCTION
  1466.         END IF
  1467.     ELSE
  1468.         IF calculateHeroActualStrength% >= calculateItemReqStrength%(inHand.kind, inHand.lvl) _
  1469.         AND calculateHeroActualAgility% >= calculateItemReqAgility%(inHand.kind, inHand.lvl) _
  1470.         AND calculateHeroActualPower% >= calculateItemReqPower%(inHand.kind, inHand.lvl, inHand.special) THEN
  1471.             itemRequirementsMet% = TRUE: EXIT FUNCTION
  1472.         END IF
  1473.     END IF
  1474.     itemRequirementsMet% = FALSE
  1475. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1476. FUNCTION calculateItemReqStrength% (k%, l%)
  1477.     SELECT CASE k%
  1478.         CASE 4: IF l% > 0 THEN calculateItemReqStrength% = 15 + l% * 2: EXIT FUNCTION ' swords
  1479.         CASE 5: IF l% > 0 THEN calculateItemReqStrength% = 15 + l% * 3: EXIT FUNCTION ' axes
  1480.         CASE 7: calculateItemReqStrength% = 10 + l% * 2: EXIT FUNCTION '                bows
  1481.         CASE 8: calculateItemReqStrength% = 10 + l% * 3: EXIT FUNCTION '                crossbows
  1482.         CASE 12: IF l% > 0 THEN calculateItemReqStrength% = 5 + l% * 4: EXIT FUNCTION ' armors
  1483.         CASE 13: IF l% > 0 THEN calculateItemReqStrength% = 5 + l% * 2: EXIT FUNCTION ' helms
  1484.         CASE 14: IF l% > 0 THEN calculateItemReqStrength% = 5 + l% * 3: EXIT FUNCTION ' shields
  1485.     END SELECT
  1486.     calculateItemReqStrength% = 0
  1487. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1488. FUNCTION calculateItemReqAgility% (k%, l%)
  1489.     SELECT CASE k%
  1490.         CASE 5: IF l% > 0 THEN calculateItemReqAgility% = 10 + l% * 2: EXIT FUNCTION '  axes
  1491.         CASE 6: IF l% > 0 THEN calculateItemReqAgility% = 15 + l% * 3: EXIT FUNCTION '  throws
  1492.         CASE 7: calculateItemReqAgility% = 20 + l% * 4: EXIT FUNCTION '                 bows
  1493.         CASE 8: calculateItemReqAgility% = 20 + l% * 8: EXIT FUNCTION '                 crossbows
  1494.         CASE 12: IF l% > 0 THEN calculateItemReqAgility% = 5 + l% * 2: EXIT FUNCTION '  armors
  1495.         CASE 13: IF l% > 0 THEN calculateItemReqAgility% = 5 + l%: EXIT FUNCTION '      helms
  1496.         CASE 14: IF l% > 0 THEN calculateItemReqAgility% = 5 + l% * 3: EXIT FUNCTION '  shields
  1497.     END SELECT
  1498.     calculateItemReqAgility% = 0
  1499. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1500. FUNCTION calculateItemReqPower% (k%, l%, s$)
  1501.     SELECT CASE k%
  1502.         CASE 2 ' scrolls only, lvl0
  1503.             IF l% = 0 THEN
  1504.                 IF INSTR(s$, "0") THEN
  1505.                     calculateItemReqPower% = 17: EXIT FUNCTION
  1506.                 ELSEIF INSTR(s$, "1") THEN
  1507.                     calculateItemReqPower% = 25: EXIT FUNCTION
  1508.                 ELSEIF INSTR(s$, "2") THEN
  1509.                     calculateItemReqPower% = 32: EXIT FUNCTION
  1510.                 ELSEIF INSTR(s$, "3") THEN
  1511.                     calculateItemReqPower% = 40: EXIT FUNCTION
  1512.                 ELSEIF INSTR(s$, "4") THEN
  1513.                     calculateItemReqPower% = 50: EXIT FUNCTION
  1514.                 ELSEIF INSTR(s$, "5") THEN
  1515.                     calculateItemReqPower% = 60: EXIT FUNCTION
  1516.                 END IF
  1517.             END IF
  1518.         CASE 3 ' books, need to check spellsIkonw
  1519.             IF INSTR(s$, "0") THEN
  1520.                 calculateItemReqPower% = SpellsIknow%%(0) * 4 + 17: EXIT FUNCTION
  1521.             ELSEIF INSTR(s$, "1") THEN
  1522.                 calculateItemReqPower% = SpellsIknow%%(1) * 4 + 17: EXIT FUNCTION
  1523.             ELSEIF INSTR(s$, "2") THEN
  1524.                 calculateItemReqPower% = SpellsIknow%%(2) * 4 + 17: EXIT FUNCTION
  1525.             ELSEIF INSTR(s$, "3") THEN
  1526.                 calculateItemReqPower% = SpellsIknow%%(3) * 4 + 17: EXIT FUNCTION
  1527.             ELSEIF INSTR(s$, "4") THEN
  1528.                 calculateItemReqPower% = SpellsIknow%%(4) * 4 + 17: EXIT FUNCTION
  1529.             ELSEIF INSTR(s$, "5") THEN
  1530.                 calculateItemReqPower% = SpellsIknow%%(5) * 4 + 17: EXIT FUNCTION
  1531.             END IF
  1532.         CASE 15: calculateItemReqPower% = 17 + ((l% + 1) * 3): EXIT FUNCTION ' WANDS
  1533.     END SELECT
  1534.     calculateItemReqPower% = 0
  1535. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1536. FUNCTION itemFitsEquipmentSlot% (indexOfSlot%)
  1537.     SELECT CASE indexOfSlot% ' we are checking where you wanna put the item
  1538.         CASE 0 ' head
  1539.             IF inHand.kind = 13 THEN itemFitsEquipmentSlot% = TRUE: EXIT FUNCTION ' if you holding a helm
  1540.         CASE 1 ' neck
  1541.             IF inHand.kind = 17 AND inHand.lvl >= 2 THEN itemFitsEquipmentSlot% = TRUE: EXIT FUNCTION
  1542.         CASE 2 ' right hand
  1543.             SELECT CASE inHand.kind
  1544.                 CASE 4, 5, 6, 9, 15: itemFitsEquipmentSlot% = TRUE: EXIT FUNCTION 'if in hand you have: swords,axes,throws,bombs or wands
  1545.                 CASE 7, 8 ' if a bow or crossbow in hand
  1546.                     IF Pocket(4).kind <> -1 THEN '& left hand is occupied
  1547.                         HUDpromt$ = "Left hand is occupied"
  1548.                     ELSE
  1549.                         itemFitsEquipmentSlot% = TRUE: EXIT FUNCTION
  1550.                     END IF
  1551.             END SELECT
  1552.         CASE 3 ' torso
  1553.             IF inHand.kind = 12 THEN itemFitsEquipmentSlot% = TRUE: EXIT FUNCTION ' if you holding an armor
  1554.         CASE 4 ' left hand
  1555.             SELECT CASE inHand.kind
  1556.                 CASE 14 ' if you have a shield in hand
  1557.                     IF (Pocket(2).kind = 7 OR Pocket(2).kind = 8) THEN ' &  on right hand you have a two handed weapon
  1558.                         HUDpromt$ = "Can't use it with a two handed weapon"
  1559.                     ELSE
  1560.                         itemFitsEquipmentSlot% = TRUE: EXIT FUNCTION
  1561.                     END IF
  1562.                 CASE 10 'and you have arrows in hand
  1563.                     IF Pocket(2).kind = 7 THEN '  & a bow equiped
  1564.                         itemFitsEquipmentSlot% = TRUE: EXIT FUNCTION
  1565.                     ELSE
  1566.                         HUDpromt$ = "You need to equip a bow"
  1567.                     END IF
  1568.                 CASE 11 ' if you have bolts in hand
  1569.                     IF Pocket(2).kind = 8 THEN ' and a crossbow equiped
  1570.                         itemFitsEquipmentSlot% = TRUE: EXIT FUNCTION
  1571.                     ELSE
  1572.                         HUDpromt$ = "You need to equip a crossbow"
  1573.                     END IF
  1574.             END SELECT
  1575.         CASE 5, 6 ' fingers
  1576.             IF inHand.kind = 17 AND inHand.lvl <= 1 THEN itemFitsEquipmentSlot% = TRUE: EXIT FUNCTION
  1577.     END SELECT
  1578.  
  1579.     itemFitsEquipmentSlot% = FALSE
  1580.  
  1581. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1582. SUB itemInformation (whichOfTheSlots%) ' TO DO: show requirements of items, organize how the info is seen acording to kind of item, add info for r special variable on items
  1583.     ' i can use lines 26, 27, 28, 29
  1584.     DIM kindOfItem%
  1585.     DIM lvlOfItem%
  1586.     DIM specialOfItem$
  1587.     DIM tmp$
  1588.  
  1589.     kindOfItem% = Pocket(whichOfTheSlots%).kind
  1590.     lvlOfItem% = Pocket(whichOfTheSlots%).lvl
  1591.     specialOfItem$ = Pocket(whichOfTheSlots%).special
  1592.  
  1593.     '1rst LINE = NAME OF ITEM OR BODY SLOT
  1594.     IF whichOfTheSlots% < 7 AND kindOfItem% = -1 THEN
  1595.         SELECT CASE whichOfTheSlots%
  1596.             CASE 0: tmp$ = "Head"
  1597.             CASE 1: tmp$ = "Neck"
  1598.             CASE 2: tmp$ = "Right hand"
  1599.             CASE 3: tmp$ = "Torso"
  1600.             CASE 4: tmp$ = "Left hand"
  1601.             CASE 5: tmp$ = "Right finger"
  1602.             CASE 6: tmp$ = "Left finger"
  1603.         END