Author Topic: Fantasy  (Read 7936 times)

0 Members and 1 Guest are viewing this topic.

Offline Juan Tamarit

  • Newbie
  • Posts: 53
    • View Profile
Fantasy
« on: September 24, 2020, 01:12:13 am »
I'm working on an RPG and i'm having a problem that i cant explain. I have an array with little hearts images for drawing life of the character and i did the following serires of IF...THEN & SELECT CASE...END SELECT statements:
Code: QB64: [Select]
  1.     lifeAsPercent% = CINT((Hero.life * 100) / Hero.maxLife) ' calculate percentage
  2.  
  3.     IF lifeAsPercent% > 99 THEN
  4.         _PUTIMAGE (32, 3), LifeImg&(0)
  5.         _PUTIMAGE (40, 3), LifeImg&(0)
  6.         _PUTIMAGE (48, 3), LifeImg&(0)
  7.         _PUTIMAGE (56, 3), LifeImg&(0)
  8.     ELSE
  9.         IF lifeAsPercent% > 74 THEN
  10.             _PUTIMAGE (32, 3), LifeImg&(0)
  11.             _PUTIMAGE (40, 3), LifeImg&(0)
  12.             _PUTIMAGE (48, 3), LifeImg&(0)
  13.             SELECT CASE lifeAsPercent%
  14.                 CASE 99 TO 95: _PUTIMAGE (56, 3), LifeImg&(1)
  15.                 CASE 94 TO 90: _PUTIMAGE (56, 3), LifeImg&(2)
  16.                 CASE 89 TO 85: _PUTIMAGE (56, 3), LifeImg&(3)
  17.                 CASE 84 TO 80: _PUTIMAGE (56, 3), LifeImg&(4)
  18.                 CASE 79 TO 75: _PUTIMAGE (56, 3), LifeImg&(5)
  19.             END SELECT
  20.         ELSE
  21.             IF lifeAsPercent% > 49 THEN
  22.                 _PUTIMAGE (32, 3), LifeImg&(0)
  23.                 _PUTIMAGE (40, 3), LifeImg&(0)
  24.                 _PUTIMAGE (56, 3), LifeImg&(5)
  25.                 SELECT CASE lifeAsPercent%
  26.                     CASE 74 TO 70: _PUTIMAGE (48, 3), LifeImg&(1)
  27.                     CASE 69 TO 65: _PUTIMAGE (48, 3), LifeImg&(2)
  28.                     CASE 64 TO 60: _PUTIMAGE (48, 3), LifeImg&(3)
  29.                     CASE 59 TO 55: _PUTIMAGE (48, 3), LifeImg&(4)
  30.                     CASE 54 TO 50: _PUTIMAGE (48, 3), LifeImg&(5)
  31.                 END SELECT
  32.             ELSE
  33.                 IF lifeAsPercent% > 24 THEN
  34.                     _PUTIMAGE (32, 3), LifeImg&(0)
  35.                     _PUTIMAGE (48, 3), LifeImg&(5)
  36.                     _PUTIMAGE (56, 3), LifeImg&(5)
  37.                     SELECT CASE lifeAsPercent%
  38.                         CASE 49 TO 45: _PUTIMAGE (40, 3), LifeImg&(1)
  39.                         CASE 44 TO 40: _PUTIMAGE (40, 3), LifeImg&(2)
  40.                         CASE 39 TO 35: _PUTIMAGE (40, 3), LifeImg&(3)
  41.                         CASE 34 TO 30: _PUTIMAGE (40, 3), LifeImg&(4)
  42.                         CASE 29 TO 25: _PUTIMAGE (40, 3), LifeImg&(5)
  43.                     END SELECT
  44.                 ELSE
  45.                     _PUTIMAGE (40, 3), LifeImg&(5)
  46.                     _PUTIMAGE (48, 3), LifeImg&(5)
  47.                     _PUTIMAGE (56, 3), LifeImg&(5)
  48.                     SELECT CASE lifeAsPercent%
  49.                         CASE 24 TO 20: _PUTIMAGE (32, 3), LifeImg&(1)
  50.                         CASE 19 TO 15: _PUTIMAGE (32, 3), LifeImg&(2)
  51.                         CASE 14 TO 10: _PUTIMAGE (32, 3), LifeImg&(3)
  52.                         CASE 9 TO 5: _PUTIMAGE (32, 3), LifeImg&(4)
  53.                         CASE 4 TO 0: _PUTIMAGE (32, 3), LifeImg&(5)
  54.                     END SELECT
  55.                 END IF ' > 24
  56.             END IF ' > 49
  57.         END IF ' > 74
  58.     END IF ' > 99

now, by some reason i can't figure it never enters the SELECT CASE...END SELECT statements. The if are working properly, but when it's suposed to get inside the corresponding SELECT CASE...END SELECT it dosn't. Is this construction i made wrong? And if it is wheres the mistake? I chequed the wiki and seems to be that what im doing is logical and ok... Any ideas on this?

Offline bplus

  • Global Moderator
  • Forum Resident
  • Posts: 8053
  • b = b + ...
    • View Profile
Re: Fantasy
« Reply #1 on: September 24, 2020, 01:21:30 am »
Try putting all IF's on same level:

Code: QB64: [Select]
  1. lifeAsPercent% = CINT((Hero.life * 100) / Hero.maxLife) ' calculate percentage
  2.  
  3. IF lifeAsPercent% > 99 THEN
  4.     _PUTIMAGE (32, 3), LifeImg&(0)
  5.     _PUTIMAGE (40, 3), LifeImg&(0)
  6.     _PUTIMAGE (48, 3), LifeImg&(0)
  7.     _PUTIMAGE (56, 3), LifeImg&(0)
  8.  
  9. ELSEIF lifeAsPercent% > 74 THEN
  10.     _PUTIMAGE (32, 3), LifeImg&(0)
  11.     _PUTIMAGE (40, 3), LifeImg&(0)
  12.     _PUTIMAGE (48, 3), LifeImg&(0)
  13.     SELECT CASE lifeAsPercent%
  14.         CASE 99 TO 95: _PUTIMAGE (56, 3), LifeImg&(1)
  15.         CASE 94 TO 90: _PUTIMAGE (56, 3), LifeImg&(2)
  16.         CASE 89 TO 85: _PUTIMAGE (56, 3), LifeImg&(3)
  17.         CASE 84 TO 80: _PUTIMAGE (56, 3), LifeImg&(4)
  18.         CASE 79 TO 75: _PUTIMAGE (56, 3), LifeImg&(5)
  19.     END SELECT
  20.  
  21. ELSEIF lifeAsPercent% > 49 THEN
  22.     _PUTIMAGE (32, 3), LifeImg&(0)
  23.     _PUTIMAGE (40, 3), LifeImg&(0)
  24.     _PUTIMAGE (56, 3), LifeImg&(5)
  25.     SELECT CASE lifeAsPercent%
  26.         CASE 74 TO 70: _PUTIMAGE (48, 3), LifeImg&(1)
  27.         CASE 69 TO 65: _PUTIMAGE (48, 3), LifeImg&(2)
  28.         CASE 64 TO 60: _PUTIMAGE (48, 3), LifeImg&(3)
  29.         CASE 59 TO 55: _PUTIMAGE (48, 3), LifeImg&(4)
  30.         CASE 54 TO 50: _PUTIMAGE (48, 3), LifeImg&(5)
  31.     END SELECT
  32.  
  33. ELSEIF lifeAsPercent% > 24 THEN
  34.     _PUTIMAGE (32, 3), LifeImg&(0)
  35.     _PUTIMAGE (48, 3), LifeImg&(5)
  36.     _PUTIMAGE (56, 3), LifeImg&(5)
  37.     SELECT CASE lifeAsPercent%
  38.         CASE 49 TO 45: _PUTIMAGE (40, 3), LifeImg&(1)
  39.         CASE 44 TO 40: _PUTIMAGE (40, 3), LifeImg&(2)
  40.         CASE 39 TO 35: _PUTIMAGE (40, 3), LifeImg&(3)
  41.         CASE 34 TO 30: _PUTIMAGE (40, 3), LifeImg&(4)
  42.         CASE 29 TO 25: _PUTIMAGE (40, 3), LifeImg&(5)
  43.     END SELECT
  44.  
  45.     _PUTIMAGE (40, 3), LifeImg&(5)
  46.     _PUTIMAGE (48, 3), LifeImg&(5)
  47.     _PUTIMAGE (56, 3), LifeImg&(5)
  48.     SELECT CASE lifeAsPercent%
  49.         CASE 24 TO 20: _PUTIMAGE (32, 3), LifeImg&(1)
  50.         CASE 19 TO 15: _PUTIMAGE (32, 3), LifeImg&(2)
  51.         CASE 14 TO 10: _PUTIMAGE (32, 3), LifeImg&(3)
  52.         CASE 9 TO 5: _PUTIMAGE (32, 3), LifeImg&(4)
  53.         CASE 4 TO 0: _PUTIMAGE (32, 3), LifeImg&(5)
  54.     END SELECT
  55.  


« Last Edit: September 24, 2020, 01:31:43 am by bplus »

Offline Juan Tamarit

  • Newbie
  • Posts: 53
    • View Profile
Re: Fantasy
« Reply #2 on: September 24, 2020, 08:11:26 am »
Dear bro B+! Sup? I tried and didn't work. =( But thanks anyway for the suggestion =)

I don't understand what is wrong with the original code i presented, seems so logical to me... The ELSEIF has the same output on the screen.

By the way, and since we are talking about IF's : what's the advantage on the ELSEIF's over the more conventional aproach of ELSE's? (besides cleaner code, now that i see it it a lot less indentend)

This looks annoying! Any more suggestions?

Offline bplus

  • Global Moderator
  • Forum Resident
  • Posts: 8053
  • b = b + ...
    • View Profile
Re: Fantasy
« Reply #3 on: September 24, 2020, 11:03:08 am »
Fresh in the morning now I see the problem clear as a bell!

BTW the advantage = cleaner code is exactly right!

So crispy clean it's obvious what the problem is!

EDIT: remove redundant code block

OK at first I thought missing or overlapping blocks, nope not that.

Now ALL these might be wrong:
Code: QB64: [Select]
  1. CASE 94 TO 90

I've never see CASE X TO Y and I certainly am surprised that Y is less than X

Try an experiment:
Code: QB64: [Select]
  1. FOR x = 1 TO 10
  2.     SELECT CASE x
  3.         CASE 10 TO 5: PRINT "I am a high level x"
  4.         CASE 5 TO 0: PRINT "I am a low level x"
  5.         CASE ELSE: PRINT "You should not see me in this code!"
  6.     END SELECT
  7.  

Yep! disaster! Here is the fix
Code: QB64: [Select]
  1. FOR x = 1 TO 10
  2.     SELECT CASE x
  3.         CASE 6, 7, 8, 9, 10: PRINT "I am a high level x"
  4.         CASE 1, 2, 3, 4, 5: PRINT "I am a low level x"
  5.         CASE ELSE: PRINT "You should not see me in this code!"
  6.     END SELECT
  7.  

Here is a better fix:
Code: QB64: [Select]
  1. FOR x = 1 TO 10
  2.     SELECT CASE x
  3.         CASE IS > 5: PRINT "I am a high level x"
  4.         CASE IS > 0: PRINT "I am a low level x"
  5.         CASE ELSE: PRINT "You should not see me in this code!"
  6.     END SELECT
  7.  
  8.  
« Last Edit: September 24, 2020, 11:16:36 am by bplus »

Offline bplus

  • Global Moderator
  • Forum Resident
  • Posts: 8053
  • b = b + ...
    • View Profile
Re: Fantasy
« Reply #4 on: September 24, 2020, 11:44:00 am »
Ha! even this works! Just put the lower number first.
Code: QB64: [Select]
  1. FOR x = 1 TO 10
  2.     SELECT CASE x
  3.         CASE 5 TO 10: PRINT "I am a high level x"
  4.         CASE 0 TO 5: PRINT "I am a low level x"
  5.         CASE ELSE: PRINT "You should not see me in this code!"
  6.     END SELECT
  7.  

Offline Juan Tamarit

  • Newbie
  • Posts: 53
    • View Profile
Re: Fantasy
« Reply #5 on: September 24, 2020, 11:32:36 pm »
broooooo, what can i say? how you do it?

i would never tought that the order matters on this! Thanks for the lesson! It will be well used. How did you came to this?


Offline bplus

  • Global Moderator
  • Forum Resident
  • Posts: 8053
  • b = b + ...
    • View Profile
Re: Fantasy
« Reply #6 on: September 25, 2020, 09:13:02 am »
Quote
How did you came to this?

:) well you saw my experiment. I knew SELECT CASE works when you tell it to do something nicely.

Different Basics have slight differences in syntax, so I just played with simple example until it worked, didn't take long. Another good resource is Wiki or Help files or this forum :)

Offline SpriggsySpriggs

  • Forum Resident
  • Posts: 1145
  • Larger than life
    • View Profile
    • GitHub
Re: Fantasy
« Reply #7 on: September 25, 2020, 11:23:00 am »
I figured it was the CASEs having the values in the wrong spot but I didn't want to say it without knowing for sure. Glad you two figured it out!
Shuwatch!

Offline bplus

  • Global Moderator
  • Forum Resident
  • Posts: 8053
  • b = b + ...
    • View Profile
Re: Fantasy
« Reply #8 on: September 25, 2020, 11:43:31 am »
Yes and I am glad to learn SELECT CASE recognizes the TO keyword with a demo how to use it.

Offline Cobalt

  • QB64 Developer
  • Forum Resident
  • Posts: 878
  • At 60 I become highly radioactive!
    • View Profile
Re: Fantasy
« Reply #9 on: September 25, 2020, 12:05:04 pm »
Yes and I am glad to learn SELECT CASE recognizes the TO keyword with a demo how to use it.

Wow I would have thought this was common knowledge, my bad.

Guess when you use certain things enough it starts to feel like second nature and you don't think twice about it.
When I originally saw you had posted to this I thought you would have had the issue nailed in the first few lines of your post(you normally do) so I didn't bother.
Granted after becoming radioactive I only have a half-life!

Offline bplus

  • Global Moderator
  • Forum Resident
  • Posts: 8053
  • b = b + ...
    • View Profile
Re: Fantasy
« Reply #10 on: September 25, 2020, 01:12:25 pm »
Wow I would have thought this was common knowledge, my bad.

Guess when you use certain things enough it starts to feel like second nature and you don't think twice about it.
When I originally saw you had posted to this I thought you would have had the issue nailed in the first few lines of your post(you normally do) so I didn't bother.

I am favorable to IF ELSEIF ELSE ENDIF because I don't have to remember which Basic set of rules I have to follow for SELECT CASE when dealing with ranges. QB64 just translates to IF ELSEIF ELSE ENDIF anyway. But it does look neater doing CASE with colon, less lines.
« Last Edit: September 25, 2020, 01:16:30 pm by bplus »

Offline Juan Tamarit

  • Newbie
  • Posts: 53
    • View Profile
Re: Fantasy
« Reply #11 on: June 13, 2021, 07:51:48 pm »
Hello there!

I lost contact with this project for a long time, and i have come back to it. The idea is to get an turn based RPG, very simple one, Diablo style but for turns: the player has his turn first, he performs an action and then one by one the enemies in the actual map perform in response.

I did some very good advances in the inventory system, but i still think that im too newbie and start to feel like im making spaghetti here. Also im quite lost about how to make a turn based system inside a loop. I know that the loop is limited to 60Hz, so i could do some math and follow a variable, but im not sure exactly how that could come in handy for the needs im thinking. I would appreciate all class of comments and critics, i really need them in this moment.

I also want to excuse myself for my english too, not really english-speaker, but i try to do my best. If theres any english related corrections on the code i would appreciate the mention.

As the full thing is in procces it's more than messy.


Code: QB64: [Select]
  1. '----------------------------------------------------------------------------------------------------------Û    SETUP    Û--------------------------------------------------------------------------------------------------------------
  2. SCREEN _NEWIMAGE(640, 480, 32) ' enter in graphics mode 640x480 32 bith color depth
  3. _FULLSCREEN ' fullscreen mode, make it shine
  4. _MOUSEHIDE ' dont show OS cursor, we will use our own
  5. 'x = 20 cells
  6. 'y = 15 cells(14 in fact for gameplay, the upper one holds the HUD)
  7.  
  8. '----------------------------------------------------------------------------------------------------------Û VARAIABLES Û--------------------------------------------------------------------------------------------------------------
  9. 'Û PROGRAM GLOBALS Û- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  10. CONST FALSE = 0: CONST TRUE = NOT FALSE ' ying-yang
  11.  
  12. DIM SHARED actualMenuWorking%
  13. DIM SHARED actualMapWorking%
  14. DIM SHARED gameTurn%
  15. DIM SHARED clockForFantasy%
  16.  
  17.  
  18. 'Û COLORS Û- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  19. CONST GREEN1 = _RGB32(215, 232, 148) ' lighter ¿
  20. CONST GREEN2 = _RGB32(174, 196, 64) '          ³ colors
  21. CONST GREEN3 = _RGB32(82, 127, 57) '           ³
  22. CONST GREEN4 = _RGB32(32, 70, 49) ' darker     Ù
  23. CONST GRAY = _RGB32(127, 127, 127) ' gray
  24.  
  25. 'Û IMAGES Û- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  26. DIM SHARED LightImg&(7): DIM SHARED WorldImg&(23): DIM SHARED PotionImg&(7): DIM SHARED SwordImg&(7): DIM SHARED AxeImg&(7): DIM SHARED ArmorImg&(7): DIM SHARED HelmImg&(7): DIM SHARED ShieldImg&(7): DIM SHARED WandImg&(7)
  27. DIM SHARED HeroImg&(7): DIM SHARED EnemyImg&(31): DIM SHARED LvlImg&(10): DIM SHARED ThrowImg&(2): DIM SHARED BombImg&(2): DIM SHARED ArrowImg&(2): DIM SHARED FingerImg&(5): DIM SHARED KeysImg&(5): DIM SHARED UtileryImg&(5)
  28. DIM SHARED SpellImg&(5): DIM SHARED LifeImg&(5): DIM SHARED BonusImg&(12): DIM SHARED DirArrowImg&(12): DIM SHARED ManaImg&(6): DIM SHARED BowImg&(4): DIM SHARED PaperImg&(3): DIM SHARED BookImg&(3): DIM SHARED MoneyImg&(3)
  29. DIM SHARED JewelImg&(3): DIM SHARED ChestImg&(1): DIM SHARED SpearImg&(1): DIM SHARED WonderImg&(1): DIM SHARED BannerImg&(1): DIM SHARED BlankImg&
  30.  
  31. 'Û MECHS Û- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  32. TYPE MECHANICAL
  33.     x AS INTEGER ' mouse x position
  34.     y AS INTEGER ' mouse y position
  35.     kind AS _BYTE
  36.     map AS _BYTE
  37.     state AS _BYTE
  38.  
  39. REDIM SHARED Mechs(0) AS MECHANICAL
  40.  
  41. 'Û POINTER/MOUSE Û- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  42. TYPE POINTER '
  43.     x AS INTEGER ' mouse x position
  44.     y AS INTEGER ' mouse y position
  45.     image AS LONG ' mouse aspect
  46.     clickL AS INTEGER ' left click
  47.     clickR AS INTEGER ' right click
  48.     tmpClickL AS INTEGER '¿
  49.     tmpClickR AS INTEGER '³ debouncing
  50.     oldClickL AS INTEGER '³ stuff
  51.     oldClickR AS INTEGER
  52.  
  53. DIM SHARED Finger AS POINTER ' create the mouse
  54.  
  55. 'Û HERO Û- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  56. TYPE USER '
  57.     x AS INTEGER ' x position
  58.     y AS INTEGER ' y position
  59.     id AS STRING ' player name
  60.     class AS STRING ' Barbarian, Clerig, Assasin or Wizard
  61.     lvl AS _BYTE ' current character level
  62.     strength AS _BYTE '¿
  63.     agility AS _BYTE ' ³ basic
  64.     power AS _BYTE '   ³ skills
  65.     vigor AS _BYTE '   Ù
  66.     life AS INTEGER ' actual life ammount
  67.     mana AS INTEGER ' actual life ammount
  68.     xp AS INTEGER ' actual experience level
  69.     nextXp AS INTEGER ' the next target for lvlUp
  70.     prevNextXp AS INTEGER '
  71.     image AS LONG ' aspect of the hero
  72.     attributePoints AS INTEGER
  73. '
  74. DIM SHARED Hero AS USER ' create the hero
  75.  
  76. 'Û ITEMS Û- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  77. TYPE OBJECT
  78.     x AS INTEGER
  79.     y AS INTEGER
  80.     kind AS _BYTE
  81.     lvl AS _BYTE ' level of the object
  82.     ammount AS INTEGER ' can be simply 1 or more
  83.     special AS STRING '<--------------------------¿
  84.     map AS _BYTE 'MAP number OR -1 for POCKET     ³
  85. END TYPE '                                        ³
  86. ' ITEMS SPECIAL VARIABLE:-------------------------¾
  87. 's=adds strength; a=adds agility; p=adds power; v=adds vigor;¿ CAN BE
  88. 'd=adds defense; b=adds to base damage;m=adds to max damage; ³ FROM 1              eg:a1,v3,d2,etc...
  89. 'c=adds to chance TO HIT% ;                                  ¾ TO 3
  90. 't= teaches some spell(from 0 to 5);
  91. 'u=unidentified (has no number)
  92.  
  93. DIM SHARED Pocket(22) AS OBJECT
  94. DIM SHARED inHand AS OBJECT
  95. REDIM SHARED Items(0) AS OBJECT
  96.  
  97. 'Û WORLD Û- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  98. DIM SHARED WorldTiles%%(19, 13)
  99. DIM SHARED lastMapWorking%
  100.  
  101. 'Û ENEMIES Û- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  102. TYPE PROGRAMMER '
  103.     x AS INTEGER ' x position
  104.     y AS INTEGER ' y position
  105.     map AS _BYTE ' in wich map enemy is
  106.     lvl AS _BYTE ' enemies level goes from 0 to 31, same as the image array
  107.     life AS INTEGER 'enemy remaining life
  108.  
  109. REDIM SHARED Enemy(2) AS PROGRAMMER ' create enemies
  110.  
  111. 'Û SPELLS Û- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  112. 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
  113.  
  114. '----------------------------------------------------------------------------------------------------------Û PRE-PROGRAM Û--------------------------------------------------------------------------------------------------------------
  115. IF _DIREXISTS(".\data") THEN '     ¿
  116.     CHDIR ".\data" '               ³ Change
  117. ELSE '                             ³ Directory
  118.     PRINT "Data folder not found" '³ + Check
  119.     SYSTEM '                       ³ + Error CASE
  120. END IF '                           ¾
  121. loadImages
  122.  
  123. _ICON SpellImg&(0)
  124. _TITLE "Fantasy"
  125.  
  126. loadProgramInitialVariables
  127.  
  128. '----------------------------------------------------------------------------------------------------------Û   PROGRAM   Û--------------------------------------------------------------------------------------------------------------
  129.     _LIMIT 60 ' relax the CPU
  130.     CLS
  131.     'What happened to the MUSIC????? XD
  132.     playerInputs
  133.  
  134.     IF actualMapWorking% <> -1 THEN
  135.         drawMyFantasy
  136.     ELSE
  137.         CLS , GREEN3
  138.     END IF
  139.  
  140.     SELECT CASE actualMenuWorking%
  141.         CASE 0 ' GAME
  142.             IF NOT gameTurn% = -1 THEN
  143.                 'drawTrhows         -------> first show the action performed by the player, be it a spell or arrow/bolt/throw/bomb
  144.                 enemiesTurns
  145.             ELSE
  146.             END IF
  147.         CASE -1: lookInPocket ' POCKET
  148.         CASE -2: selectSomeSpell ' SPELLS
  149.         CASE -3: showTheStats ' STATS
  150.         CASE -4: mainMenu ' MENU
  151.         CASE -5: newGame ' NEW GAME
  152.         CASE -6: loadGame
  153.         CASE -7: saveGame
  154.         CASE -8: unloadImages: SYSTEM ' EXIT
  155.         CASE -9: helpMenu ' HELP
  156.         CASE -10: lookAtMap ' MAP
  157.     END SELECT
  158.  
  159.     IF Hero.life > calculateMaxLife% THEN Hero.life = calculateMaxLife%
  160.     IF Hero.mana > calculateMaxMana% THEN Hero.mana = calculateMaxMana%
  161.  
  162.     doWithFinger
  163.     TESTER
  164.     _DISPLAY ' update screen
  165.  
  166. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  167. SUB helpMenu () ' INCOMPLETE°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°Û MENUS Û°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
  168.     LOCATE 1, 1
  169.     PRINT "How to play"
  170.     doWithFinger
  171.     keyboardInputs
  172. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  173.  
  174. SUB showTheStats () ' STILL HAVE TO: !!!ARROW FOR UPGRADING CAN'T APPEAR IF WE REACHED TOP OF SKILL FOR CLASS!!!! Also reorganize the text and positions to imitate Diablo style of skills: base & now
  175.  
  176.     drawMenuBack 247, 99, 391, 274
  177.     LOCATE 8, 38 '  ¿ TITLE
  178.     PRINT "STATS";
  179.     closeWindowButton 375, 102
  180.  
  181.     LINE (298, 127)-(332, 142), GREEN2, BF '                   ¿
  182.     _PUTIMAGE (299, 128), LvlImg&(0) ' static "Lvl" img        ³ROMAN number
  183.     _PUTIMAGE (315, 128), LvlImg&(Hero.lvl) ' Lvl roman number Ù
  184.  
  185.     drawItemSlots 255, 143: _PUTIMAGE (255, 143), Hero.image '
  186.  
  187.     LOCATE 10, 38: PRINT Hero.id;
  188.     LOCATE 11, 38: PRINT Hero.class;
  189.  
  190.     LOCATE 12, 33
  191.     PRINT "STR"; calculateHeroActualStrength%;
  192.     LOCATE 12, 42
  193.     PRINT "AGI"; calculateHeroActualAgility%;
  194.     LOCATE 13, 33
  195.     PRINT "POW"; calculateHeroActualPower%;
  196.     LOCATE 13, 42
  197.     PRINT "VIG"; calculateHeroActualVigor%;
  198.  
  199.  
  200.     LOCATE 15, 35: PRINT "DMG" + _TRIM$(STR$(calculateHeroBaseDmg%)) + "-" + _TRIM$(STR$(calculateHeroMaxDmg%));
  201.     LOCATE 16, 33: PRINT "DEF"; calculateHeroDefense%;
  202.     LOCATE 16, 40: PRINT "HIT%"; calculateHeroChanceToHit%;
  203.  
  204.  
  205.     IF Hero.attributePoints > 0 THEN ' if you have points
  206.  
  207.         _PUTIMAGE (304, 176), DirArrowImg&(4) ' strength         ¿
  208.         IF fingerIsOnSurface%(304, 176, 16, 16) THEN '           ³
  209.             printHUDpromt "Increase your strength" '             ³
  210.             IF Finger.clickL THEN '                              ³
  211.                 Hero.strength = Hero.strength + 1 '              ³
  212.                 Hero.attributePoints = Hero.attributePoints - 1
  213.             END IF '                                             ³
  214.         END IF '                                                 ³
  215.         _PUTIMAGE (376, 176), DirArrowImg&(4) ' agility          ³
  216.         IF fingerIsOnSurface%(376, 176, 16, 16) THEN '           ³
  217.             printHUDpromt "Increase your agility" '              ³
  218.             IF Finger.clickL THEN '                              ³
  219.                 Hero.agility = Hero.agility + 1 '                ³ ARROWS
  220.                 Hero.attributePoints = Hero.attributePoints - 1 '³ FOR
  221.             END IF '                                             ³ UPGRADING  <---------------Need to make functions for checking topStrength, topPower, etc... calculateHeroTopVigor
  222.         END IF '                                                 ³ SKILLS
  223.         _PUTIMAGE (304, 192), DirArrowImg&(4) ' power            ³
  224.         IF fingerIsOnSurface%(304, 192, 16, 16) THEN '           ³
  225.             printHUDpromt "Increase your power" '                ³
  226.             IF Finger.clickL THEN '                              ³
  227.                 Hero.power = Hero.power + 1 '                    ³
  228.                 Hero.attributePoints = Hero.attributePoints - 1
  229.             END IF '                                             ³
  230.         END IF '                                                 ³
  231.         _PUTIMAGE (376, 192), DirArrowImg&(4) ' vigor            ³
  232.         IF fingerIsOnSurface%(376, 192, 16, 16) THEN '           ³
  233.             printHUDpromt "Increase your vigor" '                ³
  234.             IF Finger.clickL THEN '                              ³
  235.                 Hero.vigor = Hero.vigor + 1 '                    ³
  236.                 Hero.attributePoints = Hero.attributePoints - 1
  237.             END IF '                                             ³
  238.         END IF '                                                 ¾
  239.  
  240.         drawMenuBack 272, 296, 359, 359 '¿
  241.         LOCATE 20, 36 '                  ³
  242.         PRINT "ATTRIBUTE"; '             ³ bottom
  243.         LOCATE 21, 37 '                  ³ box
  244.         PRINT "POINTS"; '                ³
  245.         LOCATE 22, 39 '                  ³
  246.         PRINT Hero.attributePoints; '    ¾
  247.     END IF
  248.  
  249.  
  250. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  251. SUB newGame () '!!!!!!! set me to 0 after testing
  252.  
  253.     DIM i%
  254.  
  255.     actualMapWorking% = -1 'leave actual game
  256.  
  257.     chooseClass '¿ don't switch
  258.     enterName '  Ù the order!
  259.  
  260.     Hero.lvl = 1 ' start with a fresh character
  261.     Hero.xp = 0 '              ¿
  262.     Hero.nextXp = 100 '        ³ with no xp
  263.     Hero.prevNextXp = 0 '      ³
  264.     Hero.attributePoints = 5 ' ¾ <--------------------------!!!!!!! set me to 0 after testing
  265.  
  266.     FOR i% = 0 TO 5
  267.         SpellsIknow%%(i%) = 0 ' you don't know any spells
  268.     NEXT i%
  269.  
  270.     'Û LOAD CHARACTER INITIAL VARIABLES Û
  271.     SELECT CASE Hero.class 'according to class
  272.         CASE "Barbarian" '      ¿
  273.             Hero.strength = 20
  274.             Hero.agility = 10 ' ³ BARBARIAN
  275.             Hero.power = 5 '    ³ SKILLS
  276.             Hero.vigor = 15 '   Ù
  277.         CASE "Clerig" '         ¿
  278.             Hero.strength = 15
  279.             Hero.agility = 5 '  ³ CLERIG
  280.             Hero.power = 10 '   ³ SKILLS
  281.             Hero.vigor = 20 '   Ù
  282.         CASE "Assasin" '        ¿
  283.             Hero.strength = 10
  284.             Hero.agility = 20 ' ³ ASSASIN
  285.             Hero.power = 5 '    ³ SKILLS
  286.             Hero.vigor = 15 '   Ù
  287.         CASE "Wizard" '         ¿
  288.             Hero.strength = 5 ' ³
  289.             Hero.agility = 10 ' ³ WIZARD
  290.             Hero.power = 20 '   ³ SKILLS
  291.             Hero.vigor = 15 '   ³
  292.     END SELECT '                Ù
  293.  
  294.     Hero.life = calculateMaxLife%
  295.     Hero.mana = calculateMaxMana%
  296.  
  297.     FOR i% = 0 TO 22
  298.         cleanOnePocketSlot i% ' clearPocket
  299.     NEXT i%
  300.  
  301.     equipOurHero
  302.  
  303.     actualMapWorking% = 0 ' ¿ we start
  304.     Hero.x = 32 '           ³ at this
  305.     Hero.y = 64 '           Ù place
  306.  
  307.     loadEnemiesInitialVariables
  308.     loadMechsInitialVariables
  309.     showHistory 0
  310.  
  311.     actualMenuWorking% = 0 ' LAUNCH GAME!
  312.  
  313. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  314.  
  315. SUB chooseClass ()
  316.  
  317.     Hero.class = "" ' we have no class at start
  318.  
  319.     DIM i% ' ¿ LOCALS
  320.     DIM ii%
  321.  
  322.     DO
  323.         _LIMIT 60
  324.  
  325.         playerInputs
  326.  
  327.         IF actualMapWorking% <> -1 THEN
  328.             CLS
  329.             drawMyFantasy
  330.         ELSE
  331.             CLS , GREEN3 'all screen clear on green3
  332.         END IF
  333.  
  334.         drawMenuBack 247, 99, 391, 274
  335.         LOCATE 8, 35 '                                               ¿ TITLE
  336.         PRINT "CHOOSE CLASS"; ' Barbarian, Clerig, Assasin or Wizard Ù
  337.  
  338.         FOR i% = 0 TO 3
  339.             drawItemSlots 252 + i% * 34, 139 ' slots for hero images
  340.         NEXT i%
  341.  
  342.         _PUTIMAGE (252, 139), HeroImg&(0) ' Barbarian ¿
  343.         _PUTIMAGE (286, 139), HeroImg&(1) ' Clerig    ³ characters
  344.         _PUTIMAGE (320, 139), HeroImg&(3) ' Assasin   ³ images
  345.         _PUTIMAGE (354, 139), HeroImg&(6) ' Wizard    Ù
  346.  
  347.         LOCATE 14, 33: PRINT "Strength"; '¿ static
  348.         LOCATE 15, 34: PRINT "Agility"; ' ³ ATRIBUTTE
  349.         LOCATE 16, 36: PRINT "Power"; '   ³ WORDS
  350.         LOCATE 17, 36: PRINT "Vigor"; '   Ù
  351.  
  352.         FOR i% = 0 TO 3 '                                              ¿
  353.             _PUTIMAGE (327, i% * 16 + 212), ManaImg&(0) ' open         ³
  354.             _PUTIMAGE (367, i% * 16 + 212), ManaImg&(6) ' close        ³ static
  355.             FOR ii% = 0 TO 3 '                                         ³ BARS
  356.                 _PUTIMAGE (ii% * 8 + 335, i% * 16 + 212), ManaImg&(5)
  357.             NEXT ii% '                                                 ³
  358.         NEXT i% '                                                      Ù
  359.  
  360.         IF ((Finger.x > 251 AND Finger.x < 285) AND (Finger.y > 138 AND Finger.y < 172)) THEN '    ¿
  361.             LOCATE 13, 37 '                                                                        ³
  362.             PRINT "Barbarian"; '                                                                   ³
  363.             barShowingPercentage 327, 212, 100 'STRENGTH                                           ³
  364.             barShowingPercentage 327, 228, 50 'AGILITY                                             ³
  365.             barShowingPercentage 327, 244, 25 'POWER                                               ³
  366.             barShowingPercentage 327, 260, 75 ' VIGOR                                              ³
  367.             IF Finger.clickL THEN Hero.class = "Barbarian" 'if click, confirm                      Ù
  368.  
  369.         ELSEIF ((Finger.x > 285 AND Finger.x < 319) AND (Finger.y > 138 AND Finger.y < 172)) THEN '¿
  370.             LOCATE 13, 38 '                                                                        ³
  371.             PRINT "Clerig"; '                                                                      ³
  372.             barShowingPercentage 327, 212, 75 'STRENGTH                                            ³
  373.             barShowingPercentage 327, 228, 25 'AGILITY                                             ³
  374.             barShowingPercentage 327, 244, 50 'POWER                                               ³
  375.             barShowingPercentage 327, 260, 100 ' VIGOR                                             ³
  376.             IF Finger.clickL THEN Hero.class = "Clerig" 'if click, confirm                         Ù
  377.  
  378.         ELSEIF ((Finger.x > 319 AND Finger.x < 353) AND (Finger.y > 138 AND Finger.y < 172)) THEN '¿
  379.             LOCATE 13, 38 '                                                                        ³
  380.             PRINT "Assasin"; '                                                                     ³
  381.             barShowingPercentage 327, 212, 50 'STRENGTH                                            ³
  382.             barShowingPercentage 327, 228, 100 'AGILITY                                            ³
  383.             barShowingPercentage 327, 244, 25 'POWER                                               ³
  384.             barShowingPercentage 327, 260, 75 ' VIGOR                                              ³
  385.             IF Finger.clickL THEN Hero.class = "Assasin" 'if click, confirm                        Ù
  386.  
  387.         ELSEIF ((Finger.x > 353 AND Finger.x < 387) AND (Finger.y > 138 AND Finger.y < 172)) THEN '¿
  388.             LOCATE 13, 38 '                                                                        ³
  389.             PRINT "Wizard"; '                                                                      ³
  390.             barShowingPercentage 327, 212, 25 'STRENGTH                                            ³
  391.             barShowingPercentage 327, 228, 50 'AGILITY                                             ³
  392.             barShowingPercentage 327, 244, 100 'POWER                                              ³
  393.             barShowingPercentage 327, 260, 75 ' VIGOR                                              ³
  394.             IF Finger.clickL THEN Hero.class = "Wizard" 'if click, confirm                         ³
  395.         END IF '                                                                                   Ù
  396.  
  397.         doWithFinger
  398.  
  399.         _DISPLAY
  400.     LOOP UNTIL Hero.class <> "" ' leave when we have a class
  401.  
  402.  
  403. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - - -
  404. SUB enterName () ' first letter should always capitalize
  405.  
  406.     DIM playerChoosingName$ '¿
  407.     DIM suffixForName$ '     ³
  408.     DIM key$ '               ³ LOCALS
  409.     DIM i% '                 ³
  410.     DIM ii% '                Ù
  411.  
  412.     Hero.id = "" '             ¿ get ready for recive
  413.     playerChoosingName$ = "" ' Ù something
  414.  
  415.     suffixForName$ = "the " + Hero.class '¿ we already have
  416.     'center it                            ³ an rpg class ;)
  417.     ii% = 40 - (LEN(suffixForName$) \ 2)
  418.  
  419.     DO
  420.         _LIMIT 60
  421.  
  422.         getMouseData
  423.  
  424.         IF actualMapWorking% <> -1 THEN
  425.             drawMyFantasy
  426.         ELSE
  427.             CLS , GREEN3 'all screen clear on green3
  428.         END IF
  429.  
  430.         drawMenuBack 247, 99, 391, 274
  431.         LOCATE 8, 34 '              ¿ TITLE
  432.         PRINT "ENTER YOUR NAME"; '  Ù
  433.  
  434.         drawItemSlots 303, 139 ' slot for hero image
  435.         SELECT CASE Hero.class ' images of possible hero to choose
  436.             CASE "Barbarian": _PUTIMAGE (303, 139), HeroImg&(0)
  437.             CASE "Clerig": _PUTIMAGE (303, 139), HeroImg&(1)
  438.             CASE "Assasin": _PUTIMAGE (303, 139), HeroImg&(3)
  439.             CASE "Wizard": _PUTIMAGE (303, 139), HeroImg&(6)
  440.         END SELECT '
  441.  
  442.         LOCATE 12, 32 '               ¿ print
  443.         PRINT "This story begins"; '  ³ text pre
  444.         LOCATE 13, 32 '               ³ name
  445.         PRINT "with a hero called"; ' Ù
  446.  
  447.         key$ = INKEY$ ' get the key                                                                                                                     ¿
  448.         IF key$ <> "" THEN '                                                                                                                            ³
  449.             ' write                                                                                                                                     ³
  450.             IF LEN(playerChoosingName$) < 11 THEN '                                                                                                     ³ keyboard
  451.                 IF ((ASC(key$) > 64 AND ASC(key$) < 91) OR (ASC(key$) > 96 AND ASC(key$) < 123)) THEN playerChoosingName$ = playerChoosingName$ + key$ '³ inputs
  452.             END IF '                                                                                                                                    ³ for this
  453.             IF LEN(playerChoosingName$) > 0 THEN ' if the name has at least one character                                                               ³ particular
  454.                 IF ASC(key$) = 8 THEN playerChoosingName$ = LEFT$(playerChoosingName$, LEN(playerChoosingName$) - 1) ' erease letter from name          ³ menu
  455.                 IF ASC(key$) = 13 THEN Hero.id = playerChoosingName$ ' confirm name                                                                     ³
  456.             END IF '                                                                                                                                    ³
  457.         END IF '                                                                                                                                        Ù
  458.  
  459.         i% = 40 - (LEN(playerChoosingName$) \ 2) '¿ print the name
  460.         LOCATE 14, i% '                           ³ the player is
  461.         PRINT playerChoosingName$; "_"; '         Ù actually writing
  462.  
  463.         LOCATE 15, ii% '       ¿ print
  464.         PRINT suffixForName$; 'Ù "the " + Hero.class
  465.  
  466.         _PUTIMAGE (287, 245), FingerImg&(3) ' GO ¿ print
  467.         _PUTIMAGE (335, 245), FingerImg&(1) ' X  Ù "buttons"
  468.  
  469.         IF Finger.clickL THEN ' when u click                                                                                         ¿
  470.             IF LEN(playerChoosingName$) > 0 THEN ' and some name has been written                                                    ³
  471.                 ' if finger position ok, then confirm name                                                                           ³ mouse click
  472.                 IF ((Finger.x > 286 AND Finger.x < 302) AND (Finger.y > 244 AND Finger.y < 260)) THEN Hero.id = playerChoosingName$ '³ inputs in
  473.             END IF '                                                                                                                 ³ this particular
  474.             ' if u click on the cross erease the pre-name                                                                            ³ menu
  475.             IF ((Finger.x > 334 AND Finger.x < 350) AND (Finger.y > 244 AND Finger.y < 260)) THEN playerChoosingName$ = "" '         ³
  476.         END IF '                                                                                                                     Ù
  477.  
  478.         doWithFinger
  479.  
  480.         _DISPLAY
  481.     LOOP UNTIL Hero.id <> "" ' leave here when we have a name
  482.  
  483. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  484. SUB selectSomeSpell () ' INCOMPLETE
  485.  
  486.     drawMenuBack 247, 99, 391, 274
  487.     LOCATE 8, 38 '    ¿ TITLE
  488.     PRINT "SPELLS"; ' Ù
  489.     closeWindowButton 375, 102
  490.  
  491. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  492. SUB mainMenu ()
  493.  
  494.     drawMenuBack 247, 99, 391, 306
  495.  
  496.     LOCATE 8, 37 '          ¿
  497.     PRINT "FANTASY"; '      ¾  TITLE
  498.  
  499.     _PUTIMAGE (259, 103), SpellImg&(0) '¿ demoniac
  500.     _PUTIMAGE (340, 103), SpellImg&(0) 'Ù stars
  501.  
  502.     IF actualMapWorking% <> -1 THEN closeWindowButton 375, 102 ' if we are playing we should be able to see and press this button
  503.  
  504.     LOCATE 10, 36 '                                                                  ¿
  505.     IF fingerIsOnSurface%(280, 144, 72, 16) THEN '                                   ³
  506.         COLOR GREEN4, GREEN1 '                                                       ³
  507.         IF Finger.clickL THEN actualMenuWorking% = -5 '                              ³ NEW GAME
  508.     ELSE '                                                                           ³
  509.         COLOR GREEN1, GREEN4 '                                                       ³
  510.     END IF '                                                                         ³
  511.     PRINT "New  game"; '                                                             ³
  512.     IF fingerIsOnSurface%(280, 144, 72, 16) THEN printHUDpromt "Start a new game" '  ¾
  513.  
  514.  
  515.     LOCATE 12, 36 '                                                                  ¿
  516.     IF _FILEEXISTS(".\fantasy.txt") THEN ' is there a file for loading?              ³
  517.         IF fingerIsOnSurface%(280, 176, 72, 16) THEN '                               ³
  518.             COLOR GREEN4, GREEN1 '                                                   ³
  519.             IF Finger.clickL THEN actualMenuWorking% = -6 '                          ³
  520.         ELSE '                                                                       ³ LOAD GAME
  521.             COLOR GREEN1, GREEN4 '                                                   ³
  522.         END IF '                                                                     ³
  523.     ELSE '                                                                           ³
  524.         COLOR GREEN3, GREEN4 ' no file for loading                                   ³
  525.     END IF '                                                                         ³
  526.     PRINT "Load game"; '                                                             ³
  527.     IF fingerIsOnSurface%(280, 176, 72, 16) THEN printHUDpromt "Load a saved game" ' ¾
  528.  
  529.     LOCATE 14, 36 '                                                                  ¿
  530.     IF actualMapWorking% <> -1 THEN '                                                ³
  531.         IF fingerIsOnSurface%(280, 208, 72, 16) THEN '                               ³
  532.             COLOR GREEN4, GREEN1 '                                                   ³
  533.             IF Finger.clickL THEN actualMenuWorking% = -7 '                          ³
  534.         ELSE '                                                                       ³ SAVE GAME
  535.             COLOR GREEN1, GREEN4 '                                                   ³
  536.         END IF '                                                                     ³
  537.     ELSE '                                                                           ³
  538.         COLOR GREEN3, GREEN4 ' if NOT in game                                        ³
  539.     END IF '                                                                         ³
  540.     PRINT "Save Game"; '                                                             ³
  541.     IF fingerIsOnSurface%(280, 208, 72, 16) THEN printHUDpromt "Save current game" ' ¾
  542.  
  543.     LOCATE 16, 38 '                                                                  ¿
  544.     IF fingerIsOnSurface%(296, 240, 32, 16) THEN '                                   ³
  545.         COLOR GREEN4, GREEN1 '                                                       ³
  546.         IF Finger.clickL THEN actualMenuWorking% = -9 '                              ³ HELP
  547.     ELSE '                                                                           ³
  548.         COLOR GREEN1, GREEN4 '                                                       ³
  549.     END IF '                                                                         ³
  550.     PRINT "Help"; '                                                                  ³
  551.     IF fingerIsOnSurface%(296, 240, 32, 16) THEN printHUDpromt "Learn how to play" ' ¾
  552.  
  553.     LOCATE 18, 38 '                                                                  ¿
  554.     IF fingerIsOnSurface%(296, 272, 32, 16) THEN '                                   ³
  555.         COLOR GREEN4, GREEN1 '                                                       ³
  556.         IF Finger.clickL THEN actualMenuWorking% = -8 '                              ³ EXIT
  557.     ELSE '                                                                           ³ GAME
  558.         COLOR GREEN1, GREEN4 '                                                       ³
  559.     END IF '                                                                         ³
  560.     PRINT "Exit"; '                                                                  ³
  561.     IF fingerIsOnSurface%(296, 272, 32, 16) THEN printHUDpromt "Close and leave" '   ¾
  562.  
  563.     COLOR GREEN1, GREEN4 ' don't conlictuate with other stuf
  564.  
  565.  
  566. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  567. SUB lookInPocket () 'what about in case of commerce or chest, bag, bones, etc....????
  568.  
  569.     drawMenuBack 247, 99, 391, 274 '
  570.     LOCATE 8, 38 '
  571.     PRINT "POCKET"; '
  572.     closeWindowButton 375, 102
  573.  
  574.     drawMenuBack 459, 99, 603, 274 '
  575.     LOCATE 8, 64 '
  576.     PRINT "EQUIPPED"; '
  577.  
  578.     FOR i% = 0 TO 22
  579.         drawItemSlots Pocket(i%).x, Pocket(i%).y ' POCKET & EQUIPPED slots draw
  580.     NEXT i%
  581.  
  582.     drawMenuBack 29, 284, 610, 450 ' ITEM INFO
  583.  
  584.     drawItemsInPocket
  585.  
  586. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  587.  
  588. SUB lookAtMap () ' INCOMPLETE
  589.     drawMenuBack 16, 48, 624, 464
  590.     LOCATE 4, 38
  591.     PRINT "MAP"
  592.     closeWindowButton 608, 52
  593. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  594. SUB loadGame () 'INCOMPLETE
  595.     drawMenuBack 247, 99, 391, 274
  596.     LOCATE 8, 36 '    ¿ TITLE
  597.     PRINT "LOAD  GAME"; ' Ù
  598.     closeWindowButton 375, 102
  599. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  600. SUB saveGame () 'INCOMPLETE
  601.     drawMenuBack 247, 99, 391, 274
  602.     LOCATE 8, 36 '    ¿ TITLE
  603.     PRINT "SAVE  GAME"; ' Ù
  604.     closeWindowButton 375, 102
  605. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  606.  
  607. SUB cleanYourHand () '°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°Û ITEMS Û°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
  608.     inHand.kind = -1
  609.     inHand.lvl = -1
  610.     inHand.ammount = 0
  611.     inHand.special = ""
  612. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  613. FUNCTION lookForSpaceInPocket% ()
  614.     DIM i%
  615.     FOR i% = 7 TO 22
  616.         IF Pocket(i%).kind = -1 THEN lookForSpaceInPocket% = i%: EXIT FUNCTION
  617.     NEXT i%
  618.     lookForSpaceInPocket% = FALSE
  619. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  620. SUB clearPocket ()
  621.     FOR i% = 0 TO 22
  622.         Pocket(i%).kind = -1
  623.         Pocket(i%).lvl = -1
  624.         Pocket(i%).ammount = 0
  625.         Pocket(i%).special = ""
  626.     NEXT i%
  627. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  628.  
  629. SUB drawItemsInPocket ()
  630.     FOR i% = 0 TO 22
  631.         _PUTIMAGE (Pocket(i%).x, Pocket(i%).y), calculateItemImage&(Pocket(i%).kind, Pocket(i%).lvl)
  632.     NEXT i%
  633.     _PUTIMAGE (inHand.x - 16, inHand.y - 16), calculateItemImage&(inHand.kind, inHand.lvl)
  634. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  635.  
  636. SUB createItemInPocket (kind%, lvl%, ammount%, slot%, special$)
  637.     Pocket(slot%).kind = kind%
  638.     Pocket(slot%).lvl = lvl%
  639.     Pocket(slot%).ammount = ammount%
  640.     Pocket(slot%).special = special$
  641. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  642. SUB cleanOnePocketSlot (indexOfSlot%)
  643.     Pocket(indexOfSlot%).kind = -1
  644.     Pocket(indexOfSlot%).lvl = -1
  645.     Pocket(indexOfSlot%).ammount = 0
  646.     Pocket(indexOfSlot%).special = ""
  647. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  648. FUNCTION calculateItemImage& (kind%, lvl%)
  649.     SELECT CASE kind%
  650.         CASE -1: calculateItemImage& = BlankImg&
  651.         CASE 0: calculateItemImage& = KeysImg&(lvl%)
  652.         CASE 1: calculateItemImage& = PotionImg&(lvl%)
  653.         CASE 2: calculateItemImage& = PaperImg&(lvl%)
  654.         CASE 3: calculateItemImage& = BookImg&(lvl%)
  655.         CASE 4: calculateItemImage& = SwordImg&(lvl%)
  656.         CASE 5: calculateItemImage& = AxeImg&(lvl%)
  657.         CASE 6: calculateItemImage& = ThrowImg&(lvl%)
  658.         CASE 7: calculateItemImage& = BowImg&(lvl%)
  659.         CASE 8: calculateItemImage& = BowImg&(lvl% + 3)
  660.         CASE 9: calculateItemImage& = BombImg&(lvl%)
  661.         CASE 10: calculateItemImage& = ArrowImg&(lvl%)
  662.         CASE 11: calculateItemImage& = SpearImg&(lvl%)
  663.         CASE 12: calculateItemImage& = ArmorImg&(lvl%)
  664.         CASE 13: calculateItemImage& = HelmImg&(lvl%)
  665.         CASE 14: calculateItemImage& = ShieldImg&(lvl%)
  666.         CASE 15: calculateItemImage& = WandImg&(lvl%)
  667.         CASE 16: calculateItemImage& = MoneyImg&(lvl%)
  668.         CASE 17: calculateItemImage& = JewelImg&(lvl%)
  669.         CASE 18: calculateItemImage& = WonderImg&(lvl%)
  670.     END SELECT
  671. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  672. FUNCTION calculateItemDefense% (kind%, lvl%, special$)
  673.     DIM tmp%
  674.     tmp% = 0
  675.     SELECT CASE kind%
  676.         CASE 12: tmp% = 3 + 3 * lvl% ' ARMORS
  677.         CASE 13: tmp% = 1 + 1 * lvl% ' HELMS
  678.         CASE 14: tmp% = 2 + 2 * lvl% ' SHIELDS
  679.     END SELECT
  680.     IF special$ <> "" THEN
  681.         IF INSTR(special$, "d") THEN
  682.             tmp% = tmp% + VAL(RIGHT$(special$, 1))
  683.         END IF
  684.     END IF
  685.     calculateItemDefense% = tmp%
  686. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  687. FUNCTION calculateItemBaseDmg% (kind%, lvl%, special$)
  688.     DIM tmp%
  689.     tmp% = 0
  690.     SELECT CASE kind%
  691.         CASE 4: tmp% = (lvl% + 1) * 2 ' SWORDS
  692.         CASE 5: tmp% = (lvl% + 1) * 3 'AXES
  693.         CASE 6: tmp% = (lvl% + 1) 'THROWS
  694.         CASE 7: tmp% = (lvl% + 1) * 2 'BOWS
  695.         CASE 8: tmp% = (lvl% + 1) * 3 'CROSSBOWS
  696.         CASE 9: tmp% = (lvl% + 1) * 15 'BOMBS
  697.         CASE 10: tmp% = (lvl% + 1) * 2 'ARROWS
  698.         CASE 11: tmp% = (lvl% + 1) * 3 'BOLTS
  699.         CASE 15: tmp% = (lvl% + 1) 'WANDS
  700.     END SELECT
  701.     IF special$ <> "" THEN
  702.         IF INSTR(special$, "b") THEN
  703.             tmp% = tmp% + VAL(RIGHT$(special$, 1))
  704.         END IF
  705.     END IF
  706.     calculateItemBaseDmg% = tmp%
  707. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  708. FUNCTION calculateItemMaxDmg% (kind%, lvl%, special$)
  709.     DIM k%
  710.     DIM l%
  711.     DIM s$
  712.     DIM tmp%
  713.     k% = kind%
  714.     l% = lvl%
  715.     s$ = special$
  716.     SELECT CASE kind%
  717.         CASE 4: tmp% = calculateItemBaseDmg%(k%, l%, s$) + 3 ' SWORDS
  718.         CASE 5: tmp% = calculateItemBaseDmg%(k%, l%, s$) + 4 'AXES
  719.         CASE 6: tmp% = calculateItemBaseDmg%(k%, l%, s$) + 1 'THROWS
  720.         CASE 7: tmp% = calculateItemBaseDmg%(k%, l%, s$) + 2 'BOWS
  721.         CASE 8: tmp% = calculateItemBaseDmg%(k%, l%, s$) + 3 'CROSSBOWS
  722.         CASE 9: tmp% = calculateItemBaseDmg%(k%, l%, s$) + (l% + 1) * 5 'BOMBS
  723.         CASE 10: tmp% = calculateItemBaseDmg%(k%, l%, s$) + 1 'ARROWS
  724.         CASE 11: tmp% = calculateItemBaseDmg%(k%, l%, s$) + 2 'BOLTS
  725.         CASE 15: tmp% = calculateItemBaseDmg%(k%, l%, s$) + 1 'WANDS
  726.     END SELECT
  727.     IF s$ <> "" THEN
  728.         IF INSTR(s$, "m") THEN
  729.             tmp% = tmp% + VAL(RIGHT$(s$, 1))
  730.         END IF
  731.     END IF
  732.     calculateItemMaxDmg% = tmp%
  733. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  734. FUNCTION nameAnItem$ (kind%, lvl%, special$)
  735.  
  736.     DIM tmp$
  737.  
  738.     SELECT CASE kind%
  739.         CASE -1 ' nothing
  740.             tmp$ = ""
  741.         CASE 0 '  KEYS
  742.             SELECT CASE lvl%
  743.                 CASE 0: tmp$ = "Tiny"
  744.                 CASE 1: tmp$ = "Elegant"
  745.                 CASE 2: tmp$ = "Rare"
  746.                 CASE 3: tmp$ = "Heavy"
  747.                 CASE 4: tmp$ = "Criptyc"
  748.                 CASE 5: tmp$ = "Twisted"
  749.             END SELECT
  750.             tmp$ = tmp$ + " key"
  751.         CASE 1 '  POTIONS
  752.             SELECT CASE lvl% '
  753.                 CASE 0: tmp$ = "Minor"
  754.                 CASE 1: tmp$ = "Light"
  755.                 CASE 2: tmp$ = "Small"
  756.                 CASE 3: tmp$ = "Medium"
  757.                 CASE 4: nameAnItem$ = "Potion": EXIT FUNCTION
  758.                 CASE 5: tmp$ = "Large"
  759.                 CASE 6: tmp$ = "Big"
  760.                 CASE 7: tmp$ = "Full"
  761.             END SELECT
  762.             tmp$ = tmp$ + " potion"
  763.         CASE 2 '  PAPERS
  764.             SELECT CASE lvl%
  765.                 CASE 0: tmp$ = "Papers"
  766.                 CASE 1: tmp$ = "Dark spell"
  767.                 CASE 2: tmp$ = "Prophecy"
  768.                 CASE 3: tmp$ = "Map"
  769.             END SELECT
  770.         CASE 3 '  BOOKS
  771.             SELECT CASE lvl%
  772.                 CASE 0: tmp$ = "Ancient book"
  773.                 CASE 1: tmp$ = "Old book"
  774.                 CASE 2: tmp$ = "Tome"
  775.                 CASE 3: tmp$ = "Enciclopedy"
  776.             END SELECT
  777.         CASE 4 '  SWORDS
  778.             SELECT CASE lvl%
  779.                 CASE 0: tmp$ = "Small"
  780.                 CASE 1: tmp$ = "Curve"
  781.                 CASE 2: tmp$ = "Templed"
  782.                 CASE 3: tmp$ = "Medium"
  783.                 CASE 4: nameAnItem$ = "Sabre" + itemSpecialSuffix$(special$): EXIT FUNCTION
  784.                 CASE 5: tmp$ = "Sharpened"
  785.                 CASE 6: tmp$ = "Celestial"
  786.                 CASE 7: tmp$ = "Demoniac"
  787.             END SELECT
  788.             tmp$ = tmp$ + " sword"
  789.         CASE 5 '  AXES
  790.             SELECT CASE lvl%
  791.                 CASE 0: tmp$ = "Bushcraft"
  792.                 CASE 1: tmp$ = "Small"
  793.                 CASE 2: nameAnItem$ = "Bardiche" + itemSpecialSuffix$(special$): EXIT FUNCTION
  794.                 CASE 3: tmp$ = "Medium"
  795.                 CASE 4: tmp$ = "Double"
  796.                 CASE 5: tmp$ = "Sharp double"
  797.                 CASE 6: tmp$ = "War"
  798.                 CASE 7: tmp$ = "Demoniac"
  799.             END SELECT
  800.             tmp$ = tmp$ + " axe"
  801.         CASE 6 '  THROWS
  802.             SELECT CASE lvl%
  803.                 CASE 0: tmp$ = "Light"
  804.                 CASE 1: tmp$ = "Heavy"
  805.                 CASE 2: nameAnItem$ = "Throwin knives": EXIT FUNCTION
  806.             END SELECT
  807.             tmp$ = tmp$ + " shurikens"
  808.         CASE 7 '  BOWS
  809.             SELECT CASE lvl%
  810.                 CASE 0: tmp$ = "Hunter"
  811.                 CASE 1: tmp$ = "Composite"
  812.                 CASE 2: tmp$ = "War"
  813.             END SELECT
  814.             tmp$ = tmp$ + " bow"
  815.         CASE 8 '  CROSSBOWS
  816.             SELECT CASE lvl%
  817.                 CASE 0: tmp$ = "Light"
  818.                 CASE 1: tmp$ = "Heavy"
  819.             END SELECT
  820.             tmp$ = tmp$ + " crossbow"
  821.         CASE 9 '  BOMBS
  822.             SELECT CASE lvl%
  823.                 CASE 0: tmp$ = "Small"
  824.                 CASE 1: tmp$ = "Medium"
  825.                 CASE 2: tmp$ = "Large"
  826.             END SELECT
  827.             tmp$ = tmp$ + " bombs"
  828.         CASE 10 ' ARROWS
  829.             SELECT CASE lvl%
  830.                 CASE 0: tmp$ = "Light"
  831.                 CASE 1: tmp$ = "Sharp"
  832.                 CASE 2: tmp$ = "Heavy"
  833.             END SELECT
  834.             tmp$ = tmp$ + " arrows"
  835.         CASE 11 ' BOLTS
  836.             SELECT CASE lvl%
  837.                 CASE 0: tmp$ = "Light"
  838.                 CASE 1: tmp$ = "Heavy"
  839.             END SELECT
  840.             tmp$ = tmp$ + " bolts"
  841.         CASE 12 ' ARMORS
  842.             SELECT CASE lvl%
  843.                 CASE 0: nameAnItem$ = "Leather vest" + itemSpecialSuffix$(special$): EXIT FUNCTION
  844.                 CASE 1: nameAnItem$ = "Leather armor" + itemSpecialSuffix$(special$): EXIT FUNCTION
  845.                 CASE 2: nameAnItem$ = "Ring mail" + itemSpecialSuffix$(special$): EXIT FUNCTION
  846.                 CASE 3: tmp$ = "Small"
  847.                 CASE 4: tmp$ = "Medium"
  848.                 CASE 5: tmp$ = "Heavy"
  849.                 CASE 6: tmp$ = "War"
  850.                 CASE 7: tmp$ = "Full"
  851.             END SELECT
  852.             tmp$ = tmp$ + " plate"
  853.         CASE 13 ' HELMS
  854.             SELECT CASE lvl%
  855.                 CASE 0: tmp$ = "Small"
  856.                 CASE 1: tmp$ = "Medium"
  857.                 CASE 2: tmp$ = "Full"
  858.                 CASE 3: nameAnItem$ = "Half helm" + itemSpecialSuffix$(special$): EXIT FUNCTION
  859.                 CASE 4: nameAnItem$ = "Full helm" + itemSpecialSuffix$(special$): EXIT FUNCTION
  860.                 CASE 5: nameAnItem$ = "Small Helmet" + itemSpecialSuffix$(special$): EXIT FUNCTION
  861.                 CASE 6: nameAnItem$ = "Great healmet" + itemSpecialSuffix$(special$): EXIT FUNCTION
  862.                 CASE 7: nameAnItem$ = "Hellking Crown" + itemSpecialSuffix$(special$): EXIT FUNCTION
  863.             END SELECT
  864.             tmp$ = tmp$ + " cap"
  865.         CASE 14 ' SHIELDS
  866.             SELECT CASE lvl%
  867.                 CASE 0: tmp$ = "Small"
  868.                 CASE 1: tmp$ = "Medium"
  869.                 CASE 2: tmp$ = "Large"
  870.                 CASE 3: tmp$ = "Great"
  871.                 CASE 4: tmp$ = "Bronze"
  872.                 CASE 5: tmp$ = "Iron"
  873.                 CASE 6: tmp$ = "Steel"
  874.                 CASE 7: tmp$ = "War"
  875.             END SELECT
  876.             tmp$ = tmp$ + " shield"
  877.         CASE 15 ' WANDS
  878.             SELECT CASE lvl%
  879.                 CASE 0: tmp$ = "Apprentice"
  880.                 CASE 1: tmp$ = "Initiate"
  881.                 CASE 2: tmp$ = "Learner"
  882.                 CASE 3: tmp$ = "Academic"
  883.                 CASE 4: tmp$ = "Sacred"
  884.                 CASE 5: tmp$ = "Dark"
  885.                 CASE 6: tmp$ = "Egiptian"
  886.                 CASE 7: tmp$ = "Voodoo"
  887.             END SELECT
  888.             tmp$ = tmp$ + " wand"
  889.         CASE 16 ' MONEY
  890.             SELECT CASE lvl%
  891.                 CASE 0: tmp$ = "Coins"
  892.                 CASE 1: tmp$ = "Many coins"
  893.                 CASE 2: tmp$ = "Crude gemstones"
  894.                 CASE 3: tmp$ = "Gemstone"
  895.             END SELECT
  896.         CASE 17 ' JEWELERY
  897.             SELECT CASE lvl%
  898.                 CASE 0: tmp$ = "Circlet"
  899.                 CASE 1: tmp$ = "Ring"
  900.                 CASE 2: tmp$ = "Said"
  901.                 CASE 3: tmp$ = "Necklace"
  902.             END SELECT
  903.         CASE 18 ' WONDER
  904.             SELECT CASE lvl%
  905.                 CASE 0: tmp$ = "Dyran crystals"
  906.                 CASE 1: tmp$ = "The Orb"
  907.             END SELECT
  908.     END SELECT
  909.     nameAnItem$ = tmp$ + itemSpecialSuffix$(special$)
  910. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  911. FUNCTION itemSpecialSuffix$ (s$)
  912.  
  913.     DIM tmp$
  914.  
  915.     IF s$ <> "" THEN
  916.         IF INSTR(s$, "s") THEN ' adds to STR
  917.             SELECT CASE VAL(RIGHT$(s$, 1))
  918.                 CASE 1: tmp$ = "might"
  919.                 CASE 2: tmp$ = "warriors"
  920.                 CASE 3: tmp$ = "titans"
  921.             END SELECT
  922.         ELSEIF INSTR(s$, "a") THEN ' adds to AGI
  923.             SELECT CASE VAL(RIGHT$(s$, 1))
  924.                 CASE 1: tmp$ = "reflex"
  925.                 CASE 2: tmp$ = "swiftness"
  926.                 CASE 3: tmp$ = "martiality"
  927.             END SELECT
  928.         ELSEIF INSTR(s$, "p") THEN ' adds to PWR
  929.             SELECT CASE VAL(RIGHT$(s$, 1))
  930.                 CASE 1: tmp$ = "ilusionism"
  931.                 CASE 2: tmp$ = "invocation"
  932.                 CASE 3: tmp$ = "necromancy"
  933.             END SELECT
  934.         ELSEIF INSTR(s$, "v") THEN ' adds to VIG
  935.             SELECT CASE VAL(RIGHT$(s$, 1))
  936.                 CASE 1: tmp$ = "youthness"
  937.                 CASE 2: tmp$ = "longevity"
  938.                 CASE 3: tmp$ = "eternity"
  939.             END SELECT
  940.         ELSEIF INSTR(s$, "d") THEN ' adds to DEF
  941.             SELECT CASE VAL(RIGHT$(s$, 1))
  942.                 CASE 1: tmp$ = "protection"
  943.                 CASE 2: tmp$ = "guardian"
  944.                 CASE 3: tmp$ = "angels"
  945.             END SELECT
  946.         ELSEIF INSTR(s$, "m") THEN ' adds to MAX DMG
  947.             SELECT CASE VAL(RIGHT$(s$, 1))
  948.                 CASE 1: tmp$ = "fatality"
  949.                 CASE 2: tmp$ = "brutality"
  950.                 CASE 3: tmp$ = "animality"
  951.             END SELECT
  952.         ELSEIF INSTR(s$, "b") THEN ' adds to BASE DMG
  953.             SELECT CASE VAL(RIGHT$(s$, 1))
  954.                 CASE 1: tmp$ = "craftmanship"
  955.                 CASE 2: tmp$ = "technicism"
  956.                 CASE 3: tmp$ = "engineering"
  957.             END SELECT
  958.         ELSEIF INSTR(s$, "c") THEN ' adds to TO HIT%
  959.             SELECT CASE VAL(RIGHT$(s$, 1))
  960.                 CASE 1: tmp$ = "aiming"
  961.                 CASE 2: tmp$ = "exactitud"
  962.                 CASE 3: tmp$ = "precision"
  963.             END SELECT
  964.         ELSEIF INSTR(s$, "t") THEN ' teaches some spell
  965.             SELECT CASE VAL(RIGHT$(s$, 1))
  966.                 CASE 0: tmp$ = "firebolt"
  967.                 CASE 1: tmp$ = "blessing"
  968.                 CASE 2: tmp$ = "infravision"
  969.                 CASE 3: tmp$ = "teleport"
  970.                 CASE 4: tmp$ = "healing"
  971.                 CASE 5: tmp$ = "mana shield"
  972.             END SELECT
  973.         ELSEIF INSTR(s$, "u") THEN ' unidentified
  974.             itemSpecialSuffix$ = " (Unidentified)": EXIT FUNCTION
  975.         END IF
  976.         itemSpecialSuffix$ = " of " + tmp$
  977.     ELSE
  978.         itemSpecialSuffix$ = ""
  979.     END IF
  980.  
  981. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  982. SUB fromPocketToHand (slotIndex%)
  983.     inHand.kind = Pocket(slotIndex%).kind
  984.     inHand.lvl = Pocket(slotIndex%).lvl
  985.     inHand.ammount = Pocket(slotIndex%).ammount
  986.     inHand.special = Pocket(slotIndex%).special
  987.     cleanOnePocketSlot slotIndex%
  988. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  989. SUB fromHandToPocket (slotIndex%)
  990.     Pocket(slotIndex%).kind = inHand.kind
  991.     Pocket(slotIndex%).lvl = inHand.lvl
  992.     Pocket(slotIndex%).ammount = inHand.ammount
  993.     Pocket(slotIndex%).special = inHand.special
  994.     cleanYourHand
  995. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  996.  
  997. FUNCTION itemRequirementsMet% () ' NEEDS TO BE MAKED, then apply it in itemManipulationSUB
  998.  
  999. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1000. SUB itemManipulation ()
  1001.  
  1002.     DIM i%
  1003.  
  1004.  
  1005.  
  1006.     FOR i% = 7 TO 22 ' INVENTORY
  1007.         IF fingerIsOnSurface%(Pocket(i%).x, Pocket(i%).y, 32, 32) THEN
  1008.             itemInformation i%
  1009.             IF Finger.clickL AND (Pocket(i%).lvl <> -1 AND inHand.lvl = -1) THEN
  1010.                 fromPocketToHand i% 'grabbing an item from a slot
  1011.             ELSEIF Finger.clickL AND (Pocket(i%).lvl = -1 AND inHand.lvl <> -1) THEN
  1012.                 fromHandToPocket i% 'droping an item into a slot
  1013.             END IF
  1014.  
  1015.             IF Finger.clickR THEN ' if RIGHT click
  1016.                 SELECT CASE Pocket(i%).kind
  1017.                     CASE 1 ' potions
  1018.                         SOUND 440, 1
  1019.                         Hero.life = Hero.life + (Pocket(i%).lvl + 1) * 5 ' increase helth ¿ DRINKING A POTION
  1020.                         cleanOnePocketSlot i% '                      and destroy the item ¾
  1021.                     CASE 2 ' papers
  1022.                         SELECT CASE Pocket(i%).lvl '       <------------------ OTHER PAPER CASES?
  1023.                             CASE 0
  1024.                             CASE 1
  1025.                             CASE 2
  1026.                             CASE 3: actualMenuWorking% = -10 ' map
  1027.                         END SELECT
  1028.                     CASE 3 ' <-------------------------I HAVE TO CHECK IF BOOK REQUIREMENTS ARE MET
  1029.  
  1030.                 END SELECT
  1031.             END IF
  1032.         END IF
  1033.     NEXT i%
  1034.  
  1035.     FOR i% = 0 TO 6 ' EQUIPPED
  1036.         IF fingerIsOnSurface%(Pocket(i%).x, Pocket(i%).y, 32, 32) THEN
  1037.             itemInformation i%
  1038.             IF Finger.clickL AND (Pocket(i%).lvl <> -1 AND inHand.lvl = -1) THEN
  1039.                 fromPocketToHand i% ' if LEFT click grab an item from a slot. No big deal on this
  1040.  
  1041.             ELSEIF Pocket(i%).lvl = -1 AND inHand.lvl <> -1 THEN 'droping an item into a slot needs to check and inform some things
  1042.                 IF itemFitsEquipmentSlot%(i%) THEN
  1043.                     'IF itemRequirementsMet% THEN
  1044.                     IF Finger.clickL THEN fromHandToPocket i%
  1045.                     'ELSE
  1046.                     '    'printhudpromt "Requirements not met"
  1047.                     'END IF
  1048.                 END IF
  1049.             END IF
  1050.  
  1051.         END IF
  1052.     NEXT i%
  1053.  
  1054.  
  1055.  
  1056. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1057. FUNCTION itemFitsEquipmentSlot% (indexOfSlot%)
  1058.     SELECT CASE indexOfSlot% ' we are checking where you wanna put the item
  1059.         CASE 0 ' head
  1060.             IF inHand.kind = 13 THEN itemFitsEquipmentSlot% = TRUE: EXIT FUNCTION ' if you holding a helm
  1061.         CASE 1 ' neck
  1062.             IF inHand.kind = 17 AND inHand.lvl >= 2 THEN itemFitsEquipmentSlot% = TRUE: EXIT FUNCTION
  1063.         CASE 2 ' right hand
  1064.             SELECT CASE inHand.kind
  1065.                 CASE 4, 5, 6, 9, 15: itemFitsEquipmentSlot% = TRUE: EXIT FUNCTION 'if in hand you have: swords,axes,throws,bombs or wands
  1066.                 CASE 7, 8 ' if a bow or crossbow in hand
  1067.                     IF Pocket(4).kind <> -1 THEN '& left hand is occupied
  1068.                         printHUDpromt "Left hand is occupied"
  1069.                     ELSE
  1070.                         itemFitsEquipmentSlot% = TRUE: EXIT FUNCTION
  1071.                     END IF
  1072.             END SELECT
  1073.         CASE 3 ' torso
  1074.             IF inHand.kind = 12 THEN itemFitsEquipmentSlot% = TRUE: EXIT FUNCTION ' if you holding an armor
  1075.         CASE 4 ' left hand
  1076.             SELECT CASE inHand.kind
  1077.                 CASE 14 ' if you have a shield in hand
  1078.                     IF (Pocket(2).kind = 7 OR Pocket(2).kind = 8) THEN ' &  on right hand you have a two handed weapon
  1079.                         printHUDpromt "Can't use it with a two handed weapon"
  1080.                     ELSE
  1081.                         itemFitsEquipmentSlot% = TRUE: EXIT FUNCTION
  1082.                     END IF
  1083.                 CASE 10 'and you have arrows in hand
  1084.                     IF Pocket(2).kind = 7 THEN '  & a bow equiped
  1085.                         itemFitsEquipmentSlot% = TRUE: EXIT FUNCTION
  1086.                     ELSE
  1087.                         printHUDpromt "You need to equip a bow"
  1088.                     END IF
  1089.                 CASE 11 ' if you have a bolts in hand
  1090.                     IF Pocket(2).kind = 8 THEN ' and a crossbow equiped
  1091.                         itemFitsEquipmentSlot% = TRUE: EXIT FUNCTION
  1092.                     ELSE
  1093.                         printHUDpromt "You need to equip a crossbow"
  1094.                     END IF
  1095.             END SELECT
  1096.         CASE 5, 6 ' fingers
  1097.             IF inHand.kind = 17 AND inHand.lvl <= 1 THEN itemFitsEquipmentSlot% = TRUE: EXIT FUNCTION
  1098.     END SELECT
  1099.  
  1100.     itemFitsEquipmentSlot% = FALSE
  1101.  
  1102. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1103. SUB itemInformation (whichOfTheSlots%) ' organize a bit this later
  1104.  
  1105.     DIM kindOfItem%
  1106.     DIM lvlOfItem%
  1107.     DIM specialOfItem$
  1108.     DIM tmp$
  1109.  
  1110.     kindOfItem% = Pocket(whichOfTheSlots%).kind
  1111.     lvlOfItem% = Pocket(whichOfTheSlots%).lvl
  1112.     specialOfItem$ = Pocket(whichOfTheSlots%).special
  1113.  
  1114.     IF whichOfTheSlots% < 7 AND kindOfItem% = -1 THEN
  1115.         SELECT CASE whichOfTheSlots%
  1116.             CASE 0: tmp$ = "Head"
  1117.             CASE 1: tmp$ = "Neck"
  1118.             CASE 2: tmp$ = "Right hand"
  1119.             CASE 3: tmp$ = "Torso"
  1120.             CASE 4: tmp$ = "Left hand"
  1121.             CASE 5: tmp$ = "Right finger"
  1122.             CASE 6: tmp$ = "Left finger"
  1123.         END SELECT
  1124.     ELSE
  1125.         tmp$ = nameAnItem$(kindOfItem%, lvlOfItem%, specialOfItem$)
  1126.     END IF
  1127.     LOCATE 20, 40 - (LEN(tmp$) \ 2)
  1128.     PRINT tmp$;
  1129.  
  1130.     tmp$ = "" ' kill me after testing!!!!!!!
  1131.     SELECT CASE kindOfItem%
  1132.         CASE 0 'keys
  1133.             tmp$ = "Opens some door"
  1134.         CASE 1 ' potions
  1135.             tmp$ = "Heals" + STR$((lvlOfItem% + 1) * 5) + " points"
  1136.         CASE 2 ' papers
  1137.             '?
  1138.         CASE 3 'books
  1139.             tmp$ = "Learn about this spell"
  1140.         CASE 4, 5, 7, 8, 15 ' weapons
  1141.             'PRINT "Damage:"; Pocket(whichOfTheSlots%).minDmg; " -"; Pocket(whichOfTheSlots%).maxDmg
  1142.         CASE 6, 9, 10, 11 'ammunitions + throws
  1143.             'PRINT "Damage:"; Pocket(whichOfTheSlots%).minDmg; " -"; Pocket(whichOfTheSlots%).maxDmg; " , Ammount:"; Pocket(whichOfTheSlots%).ammount
  1144.         CASE 12, 13, 14 ' armors, helms & shields
  1145.             tmp$ = "Defense:" + STR$(calculateItemDefense%(kindOfItem%, lvlOfItem%, specialOfItem$))
  1146.         CASE 16 ' money
  1147.             tmp$ = "Ammount:" + STR$(Pocket(whichOfTheSlots%).ammount)
  1148.         CASE 17 ' jewlery
  1149.             IF lvlOfItem% < 2 THEN
  1150.                 tmp$ = "You can wear it on your finger"
  1151.             ELSE
  1152.                 tmp$ = "You can wear it on your neck"
  1153.             END IF
  1154.     END SELECT
  1155.     LOCATE 21, 40 - (LEN(tmp$) \ 2)
  1156.     PRINT tmp$;
  1157.  
  1158.     tmp$ = "" ' kill me after testing!!!!!!!
  1159.     IF specialOfItem$ <> "" THEN
  1160.         IF NOT INSTR(specialOfItem$, "u") THEN ' adds to strenght
  1161.             tmp$ = "+" + RIGHT$(specialOfItem$, 1) + " to "
  1162.             IF INSTR(specialOfItem$, "s") THEN ' adds to strenght
  1163.                 tmp$ = tmp$ + "strenght"
  1164.             ELSEIF INSTR(specialOfItem$, "a") THEN ' adds to agility
  1165.                 tmp$ = tmp$ + "agility"
  1166.             ELSEIF INSTR(specialOfItem$, "p") THEN ' adds to power
  1167.                 tmp$ = tmp$ + "power"
  1168.             ELSEIF INSTR(specialOfItem$, "v") THEN ' adds to vigor
  1169.                 tmp$ = tmp$ + "vigor"
  1170.             ELSEIF INSTR(specialOfItem$, "d") THEN ' adds to defense
  1171.                 tmp$ = tmp$ + "defense"
  1172.             ELSEIF INSTR(specialOfItem$, "t") THEN ' adds to defense
  1173.                 tmp$ = ""
  1174.             END IF
  1175.         ELSE
  1176.             tmp$ = ""
  1177.         END IF
  1178.     ELSE
  1179.         tmp$ = ""
  1180.     END IF
  1181.  
  1182.     LOCATE 22, 40 - (LEN(tmp$) \ 2)
  1183.     PRINT tmp$;
  1184.  
  1185. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1186. SUB equipOurHero () ' remove test items
  1187.     SELECT CASE Hero.class
  1188.         CASE "Barbarian" ' you get an axe, a shield, a potion and 100$
  1189.             createItemInPocket 5, 0, 1, 2, "" ' axe
  1190.             createItemInPocket 14, 0, 1, 4, "" ' shield
  1191.             createItemInPocket 1, 0, 1, 21, "" ' potion
  1192.             createItemInPocket 16, 0, 100, 22, "" ' 100 coins
  1193.  
  1194.  
  1195.  
  1196.  
  1197.             '°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°TESTING
  1198.             createItemInPocket 12, 2, 1, 7, "a2" '  armor
  1199.             createItemInPocket 13, 3, 1, 8, "v3" '  helm
  1200.             createItemInPocket 7, 0, 1, 9, "" ' bow
  1201.             createItemInPocket 2, 3, 1, 10, "" ' map
  1202.             createItemInPocket 17, 0, 1, 11, "p2" ' ring
  1203.             createItemInPocket 10, 0, 50, 12, "" ' 50 arrows
  1204.             createItemInPocket 17, 2, 1, 13, "d2" ' SAID for test!!!!!!!!!!
  1205.             '°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
  1206.  
  1207.         CASE "Clerig" 'you get a sword, a shield, a potion and 100$
  1208.             createItemInPocket 4, 0, 1, 2, "" '     sword
  1209.             createItemInPocket 14, 0, 1, 4, "" '    shield
  1210.             createItemInPocket 16, 0, 100, 22, "" ' 100 coins
  1211.             createItemInPocket 1, 0, 1, 21, "" '    potion
  1212.         CASE "Assasin" ' you get a bow, 50 arrows, a potion and 100$
  1213.             createItemInPocket 7, 0, 1, 2, "" '     bow
  1214.             createItemInPocket 10, 0, 50, 4, "" '   50 arrows
  1215.             createItemInPocket 16, 0, 100, 22, "" ' 100 coins
  1216.             createItemInPocket 1, 0, 1, 21, "" '    potion
  1217.         CASE "Wizard" ' you get a wand, a book, a potion and 100$
  1218.             createItemInPocket 15, 0, 1, 2, "" '    wand
  1219.             createItemInPocket 16, 0, 100, 22, "" ' 100 coins
  1220.             createItemInPocket 1, 0, 1, 21, "" '    potion
  1221.             createItemInPocket 3, 0, 1, 20, "t0" '  book
  1222.     END SELECT
  1223. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1224.  
  1225. FUNCTION calculateHeroActualStrength% () '°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°Û HERO Û°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
  1226.     DIM i%
  1227.     DIM tmp%
  1228.     tmp% = 0
  1229.     FOR i% = 0 TO 6
  1230.         IF Pocket(i%).special <> "" AND INSTR(Pocket(i%).special, "s") THEN
  1231.             tmp% = tmp% + VAL(RIGHT$(Pocket(i%).special, 1))
  1232.         END IF
  1233.     NEXT i%
  1234.     calculateHeroActualStrength% = Hero.strength + tmp%
  1235. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1236. FUNCTION calculateHeroActualAgility% ()
  1237.     DIM i%
  1238.     DIM tmp%
  1239.     tmp% = 0
  1240.     FOR i% = 0 TO 6
  1241.         IF Pocket(i%).special <> "" AND INSTR(Pocket(i%).special, "a") THEN
  1242.             tmp% = tmp% + VAL(RIGHT$(Pocket(i%).special, 1))
  1243.         END IF
  1244.     NEXT i%
  1245.     calculateHeroActualAgility% = Hero.agility + tmp%
  1246. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1247. FUNCTION calculateHeroActualPower% ()
  1248.     DIM i%
  1249.     DIM tmp%
  1250.     tmp% = 0
  1251.     FOR i% = 0 TO 6
  1252.         IF Pocket(i%).special <> "" AND INSTR(Pocket(i%).special, "p") THEN
  1253.             tmp% = tmp% + VAL(RIGHT$(Pocket(i%).special, 1))
  1254.         END IF
  1255.     NEXT i%
  1256.     calculateHeroActualPower% = Hero.power + tmp%
  1257. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1258. FUNCTION calculateHeroActualVigor% ()
  1259.     DIM i%
  1260.     DIM tmp%
  1261.     tmp% = 0
  1262.     FOR i% = 0 TO 6
  1263.         IF Pocket(i%).special <> "" AND INSTR(Pocket(i%).special, "v") THEN
  1264.             tmp% = tmp% + VAL(RIGHT$(Pocket(i%).special, 1))
  1265.         END IF
  1266.     NEXT i%
  1267.     calculateHeroActualVigor% = Hero.vigor + tmp%
  1268. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1269. FUNCTION calculateHeroChanceToHit% ()
  1270.     DIM i%
  1271.     DIM tmp%
  1272.     tmp% = 0
  1273.     FOR i% = 0 TO 6
  1274.         IF Pocket(i%).special <> "" AND INSTR(Pocket(i%).special, "c") THEN
  1275.             tmp% = tmp% + (VAL(RIGHT$(Pocket(i%).special, 1)) * 7)
  1276.         END IF
  1277.     NEXT i%
  1278.     calculateHeroChanceToHit% = INT(calculateHeroActualAgility * 1.25) + 20 + tmp%
  1279. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1280. FUNCTION calculateHeroDefense% ()
  1281.     DIM i%
  1282.     DIM tmp%
  1283.     tmp% = 0
  1284.     FOR i% = 0 TO 6
  1285.         tmp% = tmp% + calculateItemDefense%(Pocket(i%).kind, Pocket(i%).lvl, Pocket(i%).special)
  1286.     NEXT i%
  1287.     calculateHeroDefense% = tmp%
  1288. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1289. FUNCTION calculateHeroBaseDmg% () 'i should watch the case of no ammo, returning 0 IN PROCCES
  1290.     DIM i%
  1291.     DIM tmp%
  1292.     tmp% = 0
  1293.     IF NOT Pocket(2).kind = -1 THEN ' you need to have something in hand. Could better be pocket(2&4).ammount to be checked, for the ammo case
  1294.         FOR i% = 0 TO 6
  1295.             tmp% = tmp% + calculateItemBaseDmg%(Pocket(i%).kind, Pocket(i%).lvl, Pocket(i%).special)
  1296.         NEXT i%
  1297.     END IF
  1298.     calculateHeroBaseDmg% = tmp%
  1299. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1300. FUNCTION calculateHeroMaxDmg% () ' i should watch the case of no ammo, returning 0
  1301.     DIM i%
  1302.     DIM tmp%
  1303.     tmp% = 0
  1304.     IF NOT Pocket(2).kind = -1 THEN
  1305.         FOR i% = 0 TO 6
  1306.             tmp% = tmp% + calculateItemMaxDmg%(Pocket(i%).kind, Pocket(i%).lvl, Pocket(i%).special)
  1307.         NEXT i%
  1308.     END IF
  1309.     calculateHeroMaxDmg% = tmp%
  1310. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1311. FUNCTION calculateMaxLife% ()
  1312.     calculateMaxLife% = INT(calculateHeroActualVigor% * 2.75)
  1313. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1314. FUNCTION calculateMaxMana% ()
  1315.     calculateMaxMana% = INT(calculateHeroActualPower% * 3.25)
  1316. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1317. SUB drawHero ()
  1318.     IF Hero.lvl < 6 THEN
  1319.         SELECT CASE Hero.class
  1320.             CASE "Barbarian": Hero.image = HeroImg&(0)
  1321.             CASE "Clerig": Hero.image = HeroImg&(1)
  1322.             CASE "Assasin": Hero.image = HeroImg&(3)
  1323.             CASE "Wizard": Hero.image = HeroImg&(6)
  1324.         END SELECT
  1325.     ELSE
  1326.         SELECT CASE Hero.class
  1327.             CASE "Barbarian": Hero.image = HeroImg&(2)
  1328.             CASE "Clerig": Hero.image = HeroImg&(5)
  1329.             CASE "Assasin": Hero.image = HeroImg&(4)
  1330.             CASE "Wizard": Hero.image = HeroImg&(7)
  1331.         END SELECT
  1332.     END IF
  1333.     _PUTIMAGE (Hero.x, Hero.y), Hero.image
  1334. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1335.  
  1336.  
  1337. SUB drawEnemies () '°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°Û ENEMIES Û°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
  1338.     FOR i% = 0 TO UBOUND(Enemy)
  1339.         IF Enemy(i%).map = actualMapWorking% THEN
  1340.             _PUTIMAGE (Enemy(i%).x, Enemy(i%).y), EnemyImg&(Enemy(i%).lvl)
  1341.         END IF
  1342.     NEXT i%
  1343. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1344. FUNCTION calculateEnemyBaseDmg% (lvl%) ' INCOMPLETE
  1345.     calculateEnemyBaseDmg% = (lvl% + 1)
  1346. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1347. FUNCTION calculateEnemyScore% (lvl%) ' UNDONE
  1348. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1349.  
  1350. SUB loadEnemiesInitialVariables () ' <---- I SHOULD RANDOM CREATE THEM AND THEIR ARRAY SHOULD ONLY BE FOR THE ONES ON actualMapWorking%  , the rest should be on file .txt
  1351.     Enemy(0).map = 0
  1352.     Enemy(0).x = 8 * 32
  1353.     Enemy(0).y = 2 * 32 + 32
  1354.     Enemy(0).lvl = 0
  1355.     Enemy(0).life = 8
  1356.  
  1357.     Enemy(1).map = 0
  1358.     Enemy(1).x = 5 * 32
  1359.     Enemy(1).y = 2 * 32 + 32
  1360.     Enemy(1).lvl = 0
  1361.     Enemy(1).life = 8
  1362.  
  1363.     Enemy(2).map = 1
  1364.     Enemy(2).x = 7 * 32
  1365.     Enemy(2).y = 8 * 32 + 32
  1366.     Enemy(2).lvl = 0
  1367.     Enemy(2).life = 8
  1368.  
  1369. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1370.  
  1371. FUNCTION nameAnEnemy$ (lvl%)
  1372.     SELECT CASE lvl%
  1373.         CASE 0: nameAnEnemy$ = "rat"
  1374.         CASE 1: nameAnEnemy$ = "spiders"
  1375.         CASE 2: nameAnEnemy$ = "lizard"
  1376.         CASE 3: nameAnEnemy$ = "tarantula"
  1377.         CASE 4: nameAnEnemy$ = "frog"
  1378.         CASE 5: nameAnEnemy$ = "beatle"
  1379.         CASE 6: nameAnEnemy$ = "bug"
  1380.         CASE 7: nameAnEnemy$ = "dragon"
  1381.         CASE 8: nameAnEnemy$ = "living mushrooms"
  1382.         CASE 9: nameAnEnemy$ = "rabbit"
  1383.         CASE 10: nameAnEnemy$ = "small bat"
  1384.         CASE 11: nameAnEnemy$ = "big bat"
  1385.         CASE 12: nameAnEnemy$ = "snake"
  1386.         CASE 13: nameAnEnemy$ = "wolf"
  1387.         CASE 14: nameAnEnemy$ = "jabali"
  1388.         CASE 15: nameAnEnemy$ = "bear"
  1389.         CASE 16: nameAnEnemy$ = "stuffs"
  1390.         CASE 17: nameAnEnemy$ = "big stuff"
  1391.         CASE 18: nameAnEnemy$ = "scorpion"
  1392.         CASE 19: nameAnEnemy$ = "octopus"
  1393.         CASE 20: nameAnEnemy$ = "vampire"
  1394.         CASE 21: nameAnEnemy$ = "mummy"
  1395.         CASE 22: nameAnEnemy$ = "ghost"
  1396.         CASE 23: nameAnEnemy$ = "hidra"
  1397.         CASE 24: nameAnEnemy$ = "goblin"
  1398.         CASE 25: nameAnEnemy$ = "zombie"
  1399.         CASE 26: nameAnEnemy$ = "skeleton"
  1400.         CASE 27: nameAnEnemy$ = "orc"
  1401.         CASE 28: nameAnEnemy$ = "ciclope"
  1402.         CASE 29: nameAnEnemy$ = "baron of hell"
  1403.         CASE 30: nameAnEnemy$ = "stone golem"
  1404.         CASE 31: nameAnEnemy$ = "Lord of the Dark"
  1405.     END SELECT
  1406. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1407. SUB enemiesTurns () ' INCOMPLETE
  1408.     DIM lastInfortaionOfWhatHappened$
  1409.     lastInfortaionOfWhatHappened$ = ""
  1410.     FOR i% = 0 TO UBOUND(Enemy)
  1411.         IF Enemy(i%).map = actualMapWorking% THEN
  1412.             DO
  1413.                 _LIMIT 60
  1414.                 CLS
  1415.                 drawMyFantasy
  1416.                 getMouseData
  1417.  
  1418.                 IF clockForFantasy% > 0 THEN
  1419.                     clockForFantasy% = clockForFantasy% - 1
  1420.                 ELSE
  1421.                     clockForFantasy% = 120
  1422.                     enemyAI i%
  1423.                     '!!!!!! <-------------------------------------------------i should also place here the SUB for the enemy throwing attacks
  1424.                     'SOUND 440, 1
  1425.                 END IF
  1426.                 doWithFinger
  1427.                 _DISPLAY
  1428.             LOOP UNTIL clockForFantasy% = 120
  1429.         END IF
  1430.         IF i% = UBOUND(Enemy) THEN gameTurn% = -1
  1431.     NEXT i%
  1432. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1433. SUB enemyAI (enemyFromArray%) '<------------- I must build the AI for enemies' cosider particular cases later
  1434.  
  1435.  
  1436. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1437. FUNCTION enemySearchHero% (i%)
  1438.     IF Enemy(indexFromArray%).x <> Hero.x THEN
  1439.         IF Enemy(i%).x > Hero.x THEN Enemy(i%).x = Enemy(i%).x - 32
  1440.         IF Enemy(i%).x < Hero.x THEN Enemy(i%).x = Enemy(i%).x + 32
  1441.     END IF
  1442.  
  1443.     IF Enemy(indexFromArray%).y <> Hero.y THEN
  1444.  
  1445.     END IF
  1446.  
  1447.  
  1448.  
  1449. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1450.  
  1451. SUB drawMechs () '°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°Û WORLD & MECHS Û°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
  1452.     _PUTIMAGE (Mechs(0).x, Mechs(0).y), UtileryImg&(5) ' PROVISORY
  1453.  
  1454. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1455.  
  1456. SUB drawMap () ' <-Have to hard code the maps... if i could came up with a random generator... geez
  1457.  
  1458.     DIM tmp%
  1459.  
  1460.     IF lastMapWorking% <> actualMapWorking% THEN '                  check if map has changed
  1461.         IF _FILEEXISTS(".\worlds4.txt") THEN '                       if map has changed we need to read again the maps file
  1462.             OPEN "worlds4.txt" FOR INPUT AS #4 '                     ok, file found, we get ready to go
  1463.             INPUT #4, tmp% '                                        we need to check the fist data to see if matchs the actualmapworking
  1464.             WHILE tmp% <> actualMapWorking% '                   ¿
  1465.                 FOR k% = 0 TO 279 '   ¿                         ³ keep checking untill
  1466.                     INPUT #4, tmp% '  ³ waste the unneeded data ³ we found the map
  1467.                 NEXT k% '             ¾                         ³ we are in
  1468.                 INPUT #4, tmp% ' check again the first number   ³
  1469.             WEND '                                              ¾
  1470.             FOR j% = 0 TO 13 '                   ¿
  1471.                 FOR i% = 0 TO 19 '               ³ when found
  1472.                     INPUT #4, tmp% '             ³ load the data
  1473.                     WorldTiles%%(i%, j%) = tmp% ' ³
  1474.                 NEXT i% '                        ³
  1475.             NEXT j% '                            ¾
  1476.             CLOSE #4 '                            ¿ and leave
  1477.             lastMapWorking% = actualMapWorking% ' ¾
  1478.         ELSE '
  1479.             fatalError "worlds4.txt"
  1480.         END IF '
  1481.     END IF ' end of map check
  1482.  
  1483.     FOR j% = 0 TO 13 '                                                          ¿
  1484.         FOR i% = 0 TO 19 '                                                      ³
  1485.             _PUTIMAGE (i% * 32, j% * 32 + 32), WorldImg&(WorldTiles%%(i%, j%)) ' ³ actual drawing
  1486.         NEXT i% '                                                               ³
  1487.     NEXT j% '                                                                   ¾
  1488.  
  1489. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1490. SUB loadMechsInitialVariables () ' PROVISORY, load them from a CSV as maps later
  1491.  
  1492.     Mechs(0).x = 128
  1493.     Mechs(0).y = 128
  1494.     Mechs(0).kind = 0
  1495.     Mechs(0).map = 0
  1496.     Mechs(0).state = 0
  1497.  
  1498. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1499. SUB getMouseData () ''°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°Û PLAYER INPUTS Û°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
  1500.  
  1501.     DO WHILE _MOUSEINPUT: LOOP '               ¿
  1502.     Finger.x = _MOUSEX '                       ³ get
  1503.     Finger.y = _MOUSEY '                       ³ mouse
  1504.     Finger.tmpClickL = _MOUSEBUTTON(1) '       ³ info
  1505.     Finger.tmpClickR = _MOUSEBUTTON(2) '       Ù
  1506.  
  1507.     IF Finger.tmpClickL AND NOT Finger.oldClickL THEN '¿
  1508.         Finger.clickL = TRUE '                            ³ DEBOUNCE
  1509.     ELSE '                                             ³ LEFT
  1510.         Finger.clickL = FALSE '                            ³ CLICK
  1511.     END IF '                                           ³
  1512.     Finger.oldClickL = Finger.tmpClickL '              Ù
  1513.  
  1514.     IF Finger.tmpClickR AND NOT Finger.oldClickR THEN '¿
  1515.         Finger.clickR = TRUE '                            ³ DEBOUNCE
  1516.     ELSE '                                             ³ RIGHT
  1517.         Finger.clickR = FALSE '                            ³ CLICK
  1518.     END IF '                                           ³
  1519.     Finger.oldClickR = Finger.tmpClickR '              Ù
  1520.  
  1521.     inHand.x = Finger.x
  1522.     inHand.y = Finger.y
  1523.  
  1524. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1525. SUB playerInputs ()
  1526.     getMouseData
  1527.     keyboardInputs
  1528. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1529.  
  1530. SUB keyboardInputs () ' <-------------------------------------------------------No more keyboard inputs of any kind? Think in playability
  1531.  
  1532.     DIM keyPress$
  1533.  
  1534.     'only in game and if it's players turn
  1535.     'hold CTRL for throw an attack (long distance) YOU NEED TO HAVE A THROW WEAPON ON Pocket(2)!!!! AND AMMO IN Pocket(4)!!!! else should draw the cross, and if i can display "No ammo"... great. Also have to check the case of BOMBS & THROWS
  1536.     'hold SHIFT for launching same spell as before, if no spell "?" sign and HUDpromt, if no mana then cross and HUDpromt too
  1537.     'hold ALT to force a movement over an item instead of picking..... or maybe for the Rest One TURN ?
  1538.     'SPACEBAR could accelerate the action... maybe
  1539.     'P key could pause with SLEEP and HUDpromt "PAUSED Press any key to continue"
  1540.     'TAB for map
  1541.     '°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
  1542.     '° what's the best way for motion? ° numpad? QWEASDZXC? some way with
  1543.     '°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
  1544.     'F1 for help
  1545.     'F2 for new game
  1546.     'F3 for save game
  1547.     'F4 for load game
  1548.     'F5 for pause
  1549.     'number 1 for POCKET, 2 for SPELL, 3 for STATS
  1550.  
  1551.     'if TAB pressed and MAP is on pocket then SHOW MAP, press again and takes you back to the game
  1552.  
  1553.     keyPress$ = INKEY$
  1554.     IF keyPress$ <> "" THEN
  1555.  
  1556.         IF ASC(keyPress$) = 27 THEN
  1557.             SELECT CASE actualMenuWorking%
  1558.                 CASE 0
  1559.                     actualMenuWorking% = -4
  1560.  
  1561.                 CASE -1, -2, -3, -6, -7, -10: actualMenuWorking% = 0
  1562.                 CASE -4, -9
  1563.                     IF actualMapWorking% > -1 THEN
  1564.                         actualMenuWorking% = 0
  1565.                     ELSE
  1566.                         actualMenuWorking% = -4
  1567.                     END IF
  1568.             END SELECT
  1569.  
  1570.         END IF
  1571.  
  1572.     END IF
  1573. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1574. SUB closeWindowButton (x%, y%) '°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°Û GENERAL PROGRAM Û°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
  1575.     _PUTIMAGE (x%, y%), BonusImg&(0)
  1576.     IF fingerIsOnSurface%(x%, y%, 16, 16) AND inHand.lvl = -1 THEN
  1577.         printHUDpromt "Back to game"
  1578.         IF Finger.clickL THEN
  1579.             SELECT CASE actualMenuWorking%
  1580.                 CASE -1, -2, -3, -6, -7, -10: actualMenuWorking% = 0
  1581.                 CASE -4, -9
  1582.                     IF actualMapWorking% > -1 THEN
  1583.                         actualMenuWorking% = 0
  1584.                     ELSE
  1585.                         actualMenuWorking% = -4
  1586.                     END IF
  1587.             END SELECT
  1588.         END IF
  1589.     END IF
  1590. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1591. SUB drawHUD ()
  1592.  
  1593.     DIM lifeAsPercent%
  1594.     DIM manaAsPercent%
  1595.     DIM xpAsPercent%
  1596.  
  1597.     LINE (0, 0)-(639, 31), GREEN4, BF 'background line/box ¿
  1598.     LINE (0, 15)-(639, 15), GREEN1 '                       ³
  1599.     LOCATE 1, 17: PRINT CHR$(179); '¿                      ³  BACK
  1600.     LOCATE 1, 34: PRINT CHR$(179); '³ separation           ³
  1601.     LOCATE 1, 55: PRINT CHR$(179); 'Ù lines                Ù
  1602.  
  1603.     _PUTIMAGE (8, 0), BonusImg&(1) ' big heart image                      ¿
  1604.     lifeAsPercent% = CINT((Hero.life * 100) / calculateMaxLife%) '        ³
  1605.     drawFourHeartAsPercentage 32, 3, lifeAsPercent% '                     ³ HEALTH
  1606.     LOCATE 1, 10 ' written values on screen                               ³
  1607.     PRINT _TRIM$(STR$(Hero.life)); "/"; _TRIM$(STR$(calculateMaxLife%));
  1608.  
  1609.     _PUTIMAGE (144, 0), BonusImg&(6) ' big star image                     ¿
  1610.     manaAsPercent% = CINT((Hero.mana * 100) / calculateMaxMana%) '        ³
  1611.     barShowingPercentage 160, 4, manaAsPercent% '                         ³  MANA
  1612.     LOCATE 1, 27 '                                                        ³
  1613.     PRINT _TRIM$(STR$(Hero.mana)); "/"; _TRIM$(STR$(calculateMaxMana%));
  1614.  
  1615.     _PUTIMAGE (280, 0), FingerImg&(5) ' little flag image                                        ¿
  1616.     xpAsPercent% = CINT(((Hero.xp - Hero.prevNextXp) * 100) / (Hero.nextXp - Hero.prevNextXp)) ' ³
  1617.     barShowingPercentage 296, 4, xpAsPercent% '                                                  ³  EXPERIENCE
  1618.     LOCATE 1, 44 '                                                                               ³
  1619.     PRINT _TRIM$(STR$(Hero.xp)); "/"; _TRIM$(STR$(Hero.nextXp)); '                               Ù
  1620.  
  1621.     IF inHand.lvl = -1 AND gameTurn% = -1 THEN ' no items in hand, and it has to be your turn
  1622.         IF fingerIsOnSurface%(440, 0, 48, 16) THEN '                        ¿
  1623.             printHUDpromt "Look at you inventory" '                         ³
  1624.             COLOR GREEN4, GREEN1 '                                          ³
  1625.             IF Finger.clickL THEN actualMenuWorking% = -1 '                 ³
  1626.         ELSE '                                                              ³ POCKET
  1627.             COLOR GREEN1, GREEN4 '                                          ³
  1628.         END IF '                                                            ³
  1629.         LOCATE 1, 56 '                                                      ³
  1630.         PRINT "POCKET"; '                                                   Ù
  1631.  
  1632.         IF fingerIsOnSurface%(496, 0, 48, 16) THEN '                        ¿
  1633.             printHUDpromt "Select a spell to perform" '                     ³
  1634.             COLOR GREEN4, GREEN1 '                                          ³
  1635.             IF Finger.clickL THEN actualMenuWorking% = -2 '                 ³
  1636.         ELSE '                                                              ³ SPELLS
  1637.             COLOR GREEN1, GREEN4 '                                          ³
  1638.         END IF '                                                            ³
  1639.         LOCATE 1, 63 '                                                      ³
  1640.         PRINT "SPELLS"; '                                                   Ù
  1641.  
  1642.         IF fingerIsOnSurface%(552, 0, 40, 16) THEN '                        ¿
  1643.             printHUDpromt "Character statistics" '                          ³
  1644.             COLOR GREEN4, GREEN1 '                                          ³
  1645.             IF Finger.clickL THEN actualMenuWorking% = -3 '                 ³
  1646.         ELSE '                                                              ³ STATS
  1647.             COLOR GREEN1, GREEN4 '                                          ³
  1648.         END IF '                                                            ³
  1649.         LOCATE 1, 70 '                                                      ³
  1650.         PRINT "STATS"; '                                                    Ù
  1651.  
  1652.         IF fingerIsOnSurface%(600, 0, 32, 16) THEN '                        ¿
  1653.             printHUDpromt "Game main menu" '                                ³
  1654.             COLOR GREEN4, GREEN1 '                                          ³
  1655.             IF Finger.clickL THEN actualMenuWorking% = -4 '                 ³
  1656.         ELSE '                                                              ³ MENU
  1657.             COLOR GREEN1, GREEN4 '                                          ³
  1658.         END IF '                                                            ³
  1659.         LOCATE 1, 76 '                                                      ³
  1660.         PRINT "MENU"; '                                                     Ù
  1661.     ELSE '                                 ¿
  1662.         COLOR GREEN1, GREEN4 '             ³ not players turn or
  1663.         LOCATE 1, 56 '                     ³ he's grabbing something,
  1664.         PRINT "POCKET SPELLS STATS MENU"; '³ decive him
  1665.     END IF '                               ¾
  1666.     LINE (0, 15)-(639, 15), GREEN1 ' divisory line
  1667.  
  1668.     IF Hero.attributePoints > 0 THEN lvlUpHUDButton 600, 17
  1669.  
  1670.     COLOR GREEN1, GREEN4 ' leave normal printing color before leaving, so we don't conflictuate with other stuff
  1671.  
  1672. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1673.  
  1674. SUB TESTER () ' <KILL ME AFTER TESTINGS>
  1675.     COLOR GREEN1, GREEN4
  1676.     LOCATE 27, 1
  1677.     PRINT (Finger.y \ 16) + 1; ","; (Finger.x \ 8) + 1
  1678.     LOCATE 28, 1
  1679.     PRINT "x="; Finger.x;
  1680.     LOCATE 29, 1
  1681.     PRINT "y="; Finger.y;
  1682.     PSET (Finger.x, Finger.y), _RGB32(255, 0, 0) '
  1683. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1684. SUB lvlUpHUDButton (x%, y%)
  1685.     _PUTIMAGE (x%, y%), LvlImg&(0)
  1686.     _PUTIMAGE (x% + 16, y%), DirArrowImg&(4)
  1687.     IF fingerIsOnSurface%(x%, y%, 32, 16) AND inHand.lvl = -1 THEN
  1688.         printHUDpromt "Increase your attributes"
  1689.         IF Finger.clickL THEN actualMenuWorking% = -3
  1690.     END IF
  1691. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1692. SUB showHistory (momentOfHistory%) 'dude, use your fantasy
  1693.     SELECT CASE momentOfHistory%
  1694.         CASE 0
  1695.             CLS , GREEN4
  1696.  
  1697.             LOCATE 2, 2
  1698.             COLOR GREEN1, GREEN4
  1699.             PRINT "This warrior history start here."
  1700.             _DISPLAY
  1701.             SLEEP
  1702.     END SELECT
  1703. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1704.  
  1705. SUB loadImages ()
  1706.  
  1707.     DIM MainImage& '¿ locals
  1708.     DIM i% '        Ù
  1709.  
  1710.     IF _FILEEXISTS(".\fantasy1.png") THEN ' check if tileset is there                         CAN I CALL IT "fantasy1.fts"?   XD
  1711.  
  1712.         MainImage& = _LOADIMAGE(".\fantasy1.png", 32) ' load fantasy tileset in 32bit mode
  1713.  
  1714.         FOR i% = 0 TO 7
  1715.             LightImg&(i%) = _NEWIMAGE(32, 32, 32) '                                                 ¿ light
  1716.             _PUTIMAGE (0, 0), MainImage&, LightImg&(i%), (i% * 32, 0)-(i% * 32 + 31, 31) '          Ù
  1717.             WorldImg&(i%) = _NEWIMAGE(32, 32, 32) '                                                 ¿
  1718.             _PUTIMAGE (0, 0), MainImage&, WorldImg&(i%), (i% * 32, 32)-(i% * 32 + 31, 63) '         ³ tiles for
  1719.             WorldImg&(i% + 8) = _NEWIMAGE(32, 32, 32) '                                             ³ the world
  1720.             _PUTIMAGE (0, 0), MainImage&, WorldImg&(i% + 8), (i% * 32, 64)-(i% * 32 + 31, 95) '     ³
  1721.             WorldImg&(i% + 16) = _NEWIMAGE(32, 32, 32) '                                            ³
  1722.             _PUTIMAGE (0, 0), MainImage&, WorldImg&(i% + 16), (i% * 32, 96)-(i% * 32 + 31, 127) '   Ù
  1723.             PotionImg&(i%) = _NEWIMAGE(32, 32, 32) '                                                ¿ potions
  1724.             _PUTIMAGE (0, 0), MainImage&, PotionImg&(i%), (i% * 32, 160)-(i% * 32 + 31, 191) '      Ù
  1725.             SwordImg&(i%) = _NEWIMAGE(32, 32, 32) '                                                 ¿ swords
  1726.             _PUTIMAGE (0, 0), MainImage&, SwordImg&(i%), (i% * 32, 224)-(i% * 32 + 31, 255) '       Ù
  1727.             AxeImg&(i%) = _NEWIMAGE(32, 32, 32) '                                                   ¿ axes
  1728.             _PUTIMAGE (0, 0), MainImage&, AxeImg&(i%), (i% * 32, 256)-(i% * 32 + 31, 287) '         Ù
  1729.             ArmorImg&(i%) = _NEWIMAGE(32, 32, 32) '                                                 ¿ armors
  1730.             _PUTIMAGE (0, 0), MainImage&, ArmorImg&(i%), (i% * 32, 352)-(i% * 32 + 31, 383) '       Ù
  1731.             HelmImg&(i%) = _NEWIMAGE(32, 32, 32) '                                                  ¿ helms
  1732.             _PUTIMAGE (0, 0), MainImage&, HelmImg&(i%), (i% * 32, 384)-(i% * 32 + 31, 415) '        Ù
  1733.             ShieldImg&(i%) = _NEWIMAGE(32, 32, 32) '                                                ¿ shields
  1734.             _PUTIMAGE (0, 0), MainImage&, ShieldImg&(i%), (i% * 32, 416)-(i% * 32 + 31, 447) '      Ù
  1735.             WandImg&(i%) = _NEWIMAGE(32, 32, 32) '                                                  ¿ wands
  1736.             _PUTIMAGE (0, 0), MainImage&, WandImg&(i%), (i% * 32, 448)-(i% * 32 + 31, 479) '        Ù
  1737.             HeroImg&(i%) = _NEWIMAGE(32, 32, 32) '                                                  ¿ heros
  1738.             _PUTIMAGE (0, 0), MainImage&, HeroImg&(i%), (i% * 32, 576)-(i% * 32 + 31, 607) '        Ù
  1739.             EnemyImg&(i%) = _NEWIMAGE(32, 32, 32) '                                                 ¿
  1740.             _PUTIMAGE (0, 0), MainImage&, EnemyImg&(i%), (i% * 32, 608)-(i% * 32 + 31, 639) '       ³
  1741.             EnemyImg&(i% + 8) = _NEWIMAGE(32, 32, 32) '                                             ³ enemies
  1742.             _PUTIMAGE (0, 0), MainImage&, EnemyImg&(i% + 8), (i% * 32, 640)-(i% * 32 + 31, 671) '   ³
  1743.             EnemyImg&(i% + 16) = _NEWIMAGE(32, 32, 32) '                                            ³
  1744.             _PUTIMAGE (0, 0), MainImage&, EnemyImg&(i% + 16), (i% * 32, 672)-(i% * 32 + 31, 703) '  ³
  1745.             EnemyImg&(i% + 24) = _NEWIMAGE(32, 32, 32) '                                            ³
  1746.             _PUTIMAGE (0, 0), MainImage&, EnemyImg&(i% + 24), (i% * 32, 704)-(i% * 32 + 31, 735) '  Ù
  1747.         NEXT i%
  1748.  
  1749.         FOR i% = 0 TO 10
  1750.             LvlImg&(i%) = _NEWIMAGE(16, 16, 32) '                                                   ¿ character
  1751.             _PUTIMAGE (0, 0), MainImage&, LvlImg&(i%), (i% * 16, 768)-(i% * 16 + 15, 783) '         Ù level
  1752.         NEXT i%
  1753.  
  1754.         FOR i% = 0 TO 2
  1755.             ThrowImg&(i%) = _NEWIMAGE(32, 32, 32) '                                                 ¿ trhowable
  1756.             _PUTIMAGE (0, 0), MainImage&, ThrowImg&(i%), (i% * 32, 288)-(i% * 32 + 31, 319) '       Ù weapons
  1757.             BombImg&(i%) = _NEWIMAGE(32, 32, 32) '                                                  ¿ bombs
  1758.             _PUTIMAGE (0, 0), MainImage&, BombImg&(i%), (i% * 32, 320)-(i% * 32 + 31, 351) '        Ù
  1759.             ArrowImg&(i%) = _NEWIMAGE(32, 32, 32) '                                                 ¿ arrows
  1760.             _PUTIMAGE (0, 0), MainImage&, ArrowImg&(i%), (i% * 32 + 96, 320)-(i% * 32 + 127, 351) ' Ù (as weapon)
  1761.             FingerImg&(i%) = _NEWIMAGE(16, 16, 32) '                                                ¿
  1762.             _PUTIMAGE (0, 0), MainImage&, FingerImg&(i%), (i% * 16, 736)-(i% * 16 + 15, 751) '      ³ mouse
  1763.             FingerImg&(i% + 3) = _NEWIMAGE(16, 16, 32) '                                            ³ pointers
  1764.             _PUTIMAGE (0, 0), MainImage&, FingerImg&(i% + 3), (i% * 16, 752)-(i% * 16 + 15, 767) '   Ù
  1765.         NEXT i%
  1766.  
  1767.         FOR i% = 0 TO 5
  1768.             KeysImg&(i%) = _NEWIMAGE(32, 32, 32) '                                                ¿ keys
  1769.             _PUTIMAGE (0, 0), MainImage&, KeysImg&(i%), (i% * 32 + 64, 128)-(i% * 32 + 95, 159) ' Ù
  1770.             UtileryImg&(i%) = _NEWIMAGE(32, 32, 32) '                                             ¿ utilery
  1771.             _PUTIMAGE (0, 0), MainImage&, UtileryImg&(i%), (i% * 32, 512)-(i% * 32 + 31, 543) '   Ù
  1772.             SpellImg&(i%) = _NEWIMAGE(32, 32, 32) '                                               ¿ spells
  1773.             _PUTIMAGE (0, 0), MainImage&, SpellImg&(i%), (i% * 32, 544)-(i% * 32 + 31, 575) '     Ù
  1774.             LifeImg&(i%) = _NEWIMAGE(8, 8, 32) '                                                  ¿ hearts
  1775.             _PUTIMAGE (0, 0), MainImage&, LifeImg&(i%), (i% * 8, 784)-(i% * 8 + 7, 791) '         Ù
  1776.         NEXT i%
  1777.  
  1778.         FOR i% = 0 TO 12
  1779.             BonusImg&(i%) = _NEWIMAGE(16, 16, 32) '                                                ¿ bonus
  1780.             _PUTIMAGE (0, 0), MainImage&, BonusImg&(i%), (i% * 16 + 48, 736)-(i% * 16 + 63, 751) ' Ù
  1781.             DirArrowImg&(i%) = _NEWIMAGE(16, 16, 32) '                                                ¿ direction
  1782.             _PUTIMAGE (0, 0), MainImage&, DirArrowImg&(i%), (i% * 16 + 48, 752)-(i% * 16 + 63, 767) ' Ù arrows
  1783.         NEXT i%
  1784.  
  1785.         FOR i% = 0 TO 6
  1786.             ManaImg&(i%) = _NEWIMAGE(8, 8, 32) '                                          ¿ mana bar
  1787.             _PUTIMAGE (0, 0), MainImage&, ManaImg&(i%), (i% * 8, 792)-(i% * 8 + 7, 799) ' Ù
  1788.         NEXT i%
  1789.  
  1790.         FOR i% = 0 TO 4
  1791.             BowImg&(i%) = _NEWIMAGE(32, 32, 32) '                                                 ¿ bows &
  1792.             _PUTIMAGE (0, 0), MainImage&, BowImg&(i%), (i% * 32 + 96, 288)-(i% * 32 + 127, 319) ' Ù crossbows
  1793.         NEXT i%
  1794.  
  1795.         FOR i% = 0 TO 3
  1796.             PaperImg&(i%) = _NEWIMAGE(32, 32, 32) '                                           ¿ papers, map
  1797.             _PUTIMAGE (0, 0), MainImage&, PaperImg&(i%), (i% * 32, 192)-(i% * 32 + 31, 223) ' Ù & scrolls
  1798.             BookImg&(i%) = _NEWIMAGE(32, 32, 32) '                                                  ¿ books
  1799.             _PUTIMAGE (0, 0), MainImage&, BookImg&(i%), (i% * 32 + 128, 192)-(i% * 32 + 159, 223) ' Ù
  1800.             MoneyImg&(i%) = _NEWIMAGE(32, 32, 32) '                                           ¿ coins, gem
  1801.             _PUTIMAGE (0, 0), MainImage&, MoneyImg&(i%), (i% * 32, 480)-(i% * 32 + 31, 511) ' Ù & jewel
  1802.             JewelImg&(i%) = _NEWIMAGE(32, 32, 32) '                                                  ¿ rings &
  1803.             _PUTIMAGE (0, 0), MainImage&, JewelImg&(i%), (i% * 32 + 128, 480)-(i% * 32 + 159, 511) ' Ù neckless
  1804.         NEXT i%
  1805.  
  1806.         FOR i% = 0 TO 1
  1807.             ChestImg&(i%) = _NEWIMAGE(32, 32, 32) '                                           ¿ open &
  1808.             _PUTIMAGE (0, 0), MainImage&, ChestImg&(i%), (i% * 32, 128)-(i% * 32 + 31, 159) ' Ù closed chest
  1809.             SpearImg&(i%) = _NEWIMAGE(32, 32, 32) '                                                  ¿ spears
  1810.             _PUTIMAGE (0, 0), MainImage&, SpearImg&(i%), (i% * 32 + 192, 320)-(i% * 32 + 223, 351) ' Ù
  1811.             WonderImg&(i%) = _NEWIMAGE(32, 32, 32) '                                                  ¿ weird
  1812.             _PUTIMAGE (0, 0), MainImage&, WonderImg&(i%), (i% * 32 + 192, 512)-(i% * 32 + 223, 543) ' Ù things
  1813.             BannerImg&(i%) = _NEWIMAGE(32, 32, 32) '                                                  ¿ banner
  1814.             _PUTIMAGE (0, 0), MainImage&, BannerImg&(i%), (i% * 32 + 192, 544)-(i% * 32 + 223, 575) ' Ù & sign
  1815.         NEXT i%
  1816.  
  1817.         _FREEIMAGE MainImage& ' clear tileset from memory
  1818.  
  1819.         BlankImg& = _NEWIMAGE(32, 32, 32)
  1820.  
  1821.     ELSE ' in case the file fantasy1.png is missing
  1822.  
  1823.         PRINT "ERROR: file "; CHR$(34); "fantasy1.png"; CHR$(34); " not found" '¿
  1824.         SLEEP ' wait for keystroke                                              ³ ERROR CASE
  1825.         SYSTEM ' leave the program                                              Ù
  1826.  
  1827.     END IF
  1828.  
  1829.  
  1830. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1831. SUB unloadImages ()
  1832.  
  1833.     DIM i% ' LOCAL
  1834.  
  1835.     FOR i% = 0 TO 31
  1836.         _FREEIMAGE EnemyImg&(i%)
  1837.     NEXT i%
  1838.     FOR i% = 0 TO 23
  1839.         _FREEIMAGE WorldImg&(i%)
  1840.     NEXT i%
  1841.     FOR i% = 0 TO 12
  1842.         _FREEIMAGE BonusImg&(i%): _FREEIMAGE DirArrowImg&(i%)
  1843.     NEXT i%
  1844.     FOR i% = 0 TO 10
  1845.         _FREEIMAGE LvlImg&(i%)
  1846.     NEXT i%
  1847.     FOR i% = 0 TO 7
  1848.         _FREEIMAGE LightImg&(i%): _FREEIMAGE PotionImg&(i%): _FREEIMAGE SwordImg&(i%): _FREEIMAGE AxeImg&(i%): _FREEIMAGE ArmorImg&(i%): _FREEIMAGE HelmImg&(i%): _FREEIMAGE ShieldImg&(i%): _FREEIMAGE WandImg&(i%): _FREEIMAGE HeroImg&(i%)
  1849.     NEXT i%
  1850.     FOR i% = 0 TO 6
  1851.         _FREEIMAGE ManaImg&(i%)
  1852.     NEXT i%
  1853.     FOR i% = 0 TO 5
  1854.         _FREEIMAGE FingerImg&(i%): _FREEIMAGE KeysImg&(i%): _FREEIMAGE UtileryImg&(i%): _FREEIMAGE SpellImg&(i%): _FREEIMAGE LifeImg&(i%)
  1855.     NEXT i%
  1856.     FOR i% = 0 TO 4
  1857.         _FREEIMAGE BowImg&(i%)
  1858.     NEXT i%
  1859.     FOR i% = 0 TO 3
  1860.         _FREEIMAGE PaperImg&(i%): _FREEIMAGE BookImg&(i%): _FREEIMAGE MoneyImg&(i%): _FREEIMAGE JewelImg&(i%)
  1861.     NEXT i%
  1862.     FOR i% = 0 TO 2
  1863.         _FREEIMAGE ThrowImg&(i%): _FREEIMAGE BombImg&(i%): _FREEIMAGE ArrowImg&(i%)
  1864.     NEXT i%
  1865.     FOR i% = 0 TO 1
  1866.         _FREEIMAGE ChestImg&(i%): _FREEIMAGE SpearImg&(i%): _FREEIMAGE WonderImg&(i%): _FREEIMAGE BannerImg&(i%)
  1867.     NEXT i%
  1868.     _FREEIMAGE BlankImg&
  1869.  
  1870. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1871. SUB loadProgramInitialVariables ()
  1872.  
  1873.     DIM i%
  1874.  
  1875.     actualMenuWorking% = -4 ' leading to the Opening Menu
  1876.     actualMapWorking% = -1 ' with no map yet
  1877.     gameTurn% = -1 ' the player's turn, monsters are from they direct array
  1878.     clockForFantasy% = 120 ' clock is loaded
  1879.     lastMapWorking% = actualMapWorking% 'for drawMap check
  1880.  
  1881.     'initialize mouse position
  1882.     Finger.x = 319
  1883.     Finger.y = 239
  1884.  
  1885.     ' EQUIPPED positions
  1886.     Pocket(0).x = 516: Pocket(0).y = 136 ' head
  1887.     Pocket(1).x = 556: Pocket(1).y = 147 ' neck
  1888.     Pocket(2).x = 472: Pocket(2).y = 188 ' right hand
  1889.     Pocket(3).x = 516: Pocket(3).y = 188 ' torso
  1890.     Pocket(4).x = 560: Pocket(4).y = 188 ' right hand
  1891.     Pocket(5).x = 481: Pocket(5).y = 234 'right finger
  1892.     Pocket(6).x = 550: Pocket(6).y = 234 'left finger
  1893.  
  1894.     '252,136 POCKET positions
  1895.     FOR i% = 7 TO 10
  1896.         Pocket(i%).x = 252 + (i% - 7) * 34
  1897.         Pocket(i%).y = 136
  1898.         Pocket(i% + 4).x = 252 + (i% - 7) * 34
  1899.         Pocket(i% + 4).y = 136 + 34
  1900.         Pocket(i% + 8).x = 252 + (i% - 7) * 34
  1901.         Pocket(i% + 8).y = 136 + 68
  1902.         Pocket(i% + 12).x = 252 + (i% - 7) * 34
  1903.         Pocket(i% + 12).y = 136 + 102
  1904.     NEXT i%
  1905.  
  1906.     'let's also set some variables of the hand
  1907.     inHand.x = Finger.x
  1908.     inHand.y = Finger.y
  1909.     cleanYourHand
  1910.  
  1911.     FOR i% = 0 TO 22 '        ¿
  1912.         Pocket(i%).map = -1 ' ³ during all game .map for
  1913.     NEXT i% '                 ³ pocket and inHand is always -1
  1914.     inHand.map = -1 '         ¾
  1915.  
  1916. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1917. SUB drawItemSlots (begX, begY)
  1918.     LINE (begX, begY)-(begX + 32, begY + 32), GREEN1, B
  1919.     LINE (begX + 1, begY + 1)-(begX + 31, begY + 31), GREEN2, BF
  1920. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1921. SUB drawFourHeartAsPercentage (x%, y%, percent%)
  1922.     IF percent% > 99 THEN '                    ¿
  1923.         _PUTIMAGE (x%, y%), LifeImg&(0) '      ³ full
  1924.         _PUTIMAGE (x% + 8, y%), LifeImg&(0) '  ³ health
  1925.         _PUTIMAGE (x% + 16, y%), LifeImg&(0) ' ³
  1926.         _PUTIMAGE (x% + 24, y%), LifeImg&(0) ' Ù
  1927.     ELSEIF percent% > 74 THEN '                                  ¿
  1928.         _PUTIMAGE (x%, y%), LifeImg&(0) '                        ³
  1929.         _PUTIMAGE (x% + 8, y%), LifeImg&(0) '                    ³
  1930.         _PUTIMAGE (x% + 16, y%), LifeImg&(0) '                   ³ 99 to 75 %
  1931.         SELECT CASE percent% '                                   ³ health
  1932.             CASE 95 TO 99: _PUTIMAGE (x% + 24, y%), LifeImg&(1)
  1933.             CASE 90 TO 94: _PUTIMAGE (x% + 24, y%), LifeImg&(2)
  1934.             CASE 85 TO 89: _PUTIMAGE (x% + 24, y%), LifeImg&(3)
  1935.             CASE 80 TO 84: _PUTIMAGE (x% + 24, y%), LifeImg&(4)
  1936.             CASE 75 TO 79: _PUTIMAGE (x% + 24, y%), LifeImg&(5)
  1937.         END SELECT '                                             Ù
  1938.     ELSEIF percent% > 49 THEN '                                  ¿
  1939.         _PUTIMAGE (x%, y%), LifeImg&(0) '                        ³
  1940.         _PUTIMAGE (x% + 8, y%), LifeImg&(0) '                    ³
  1941.         _PUTIMAGE (x% + 24, y%), LifeImg&(5) '                   ³
  1942.         SELECT CASE percent% '                                   ³ 74 to 50 %
  1943.             CASE 70 TO 74: _PUTIMAGE (x% + 16, y%), LifeImg&(1) '³ health
  1944.             CASE 65 TO 69: _PUTIMAGE (x% + 16, y%), LifeImg&(2)
  1945.             CASE 60 TO 64: _PUTIMAGE (x% + 16, y%), LifeImg&(3)
  1946.             CASE 55 TO 59: _PUTIMAGE (x% + 16, y%), LifeImg&(4)
  1947.             CASE 50 TO 54: _PUTIMAGE (x% + 16, y%), LifeImg&(5)
  1948.         END SELECT '                                             Ù
  1949.     ELSEIF percent% > 24 THEN '                                  ¿
  1950.         _PUTIMAGE (x%, y%), LifeImg&(0) '                        ³
  1951.         _PUTIMAGE (x% + 16, y%), LifeImg&(5) '                   ³
  1952.         _PUTIMAGE (x% + 24, y%), LifeImg&(5) '                   ³
  1953.         SELECT CASE percent% '                                   ³ 49 to 25 %
  1954.             CASE 45 TO 49: _PUTIMAGE (x% + 8, y%), LifeImg&(1) ' ³ health
  1955.             CASE 40 TO 44: _PUTIMAGE (x% + 8, y%), LifeImg&(2) ' ³
  1956.             CASE 35 TO 39: _PUTIMAGE (x% + 8, y%), LifeImg&(3) ' ³
  1957.             CASE 30 TO 34: _PUTIMAGE (x% + 8, y%), LifeImg&(4) ' ³
  1958.             CASE 25 TO 29: _PUTIMAGE (x% + 8, y%), LifeImg&(5) ' ³
  1959.         END SELECT '                                             Ù
  1960.     ELSE '                                                       ¿
  1961.         _PUTIMAGE (x% + 8, y%), LifeImg&(5) '                    ³
  1962.         _PUTIMAGE (x% + 16, y%), LifeImg&(5) '                   ³
  1963.         _PUTIMAGE (x% + 24, y%), LifeImg&(5) '                   ³
  1964.         SELECT CASE percent% '                                   ³ 25 to 0 %
  1965.             CASE 20 TO 24: _PUTIMAGE (x%, y%), LifeImg&(1) '     ³ health
  1966.             CASE 15 TO 19: _PUTIMAGE (x%, y%), LifeImg&(2) '     ³
  1967.             CASE 10 TO 14: _PUTIMAGE (x%, y%), LifeImg&(3) '     ³
  1968.             CASE 5 TO 9: _PUTIMAGE (x%, y%), LifeImg&(4) '       ³
  1969.             CASE 0 TO 4: _PUTIMAGE (x%, y%), LifeImg&(5) '       ³
  1970.         END SELECT '                                             ³
  1971.     END IF '                                                     Ù
  1972.  
  1973. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1974. SUB printHUDpromt (whatDoIPrint$)
  1975.     IF actualMapWorking% <> -1 THEN
  1976.         LOCATE 2, 1 ' promt line position
  1977.         COLOR GREEN1, GREEN4 'always normal color for writing
  1978.         PRINT whatDoIPrint$;
  1979.     END IF
  1980. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1981. SUB barShowingPercentage (x%, y%, percent%)
  1982.  
  1983.     _PUTIMAGE (x%, y%), ManaImg&(0) ' opening bar
  1984.     _PUTIMAGE (x% + 40, y%), ManaImg&(6) ' closing bar
  1985.     '
  1986.     IF percent% > 99 THEN '                   ¿
  1987.         _PUTIMAGE (x% + 8, y%), ManaImg&(1) ' ³ 100%
  1988.         _PUTIMAGE (x% + 16, y%), ManaImg&(1)
  1989.         _PUTIMAGE (x% + 24, y%), ManaImg&(1)
  1990.         _PUTIMAGE (x% + 32, y%), ManaImg&(1)
  1991.     ELSEIF percent% > 74 THEN '                                  ¿
  1992.         _PUTIMAGE (x% + 8, y%), ManaImg&(1) '                    ³
  1993.         _PUTIMAGE (x% + 16, y%), ManaImg&(1) '                   ³
  1994.         _PUTIMAGE (x% + 24, y%), ManaImg&(1) '                   ³
  1995.         SELECT CASE percent% '                                   ³ 99 to 75 %
  1996.             CASE 95 TO 99: _PUTIMAGE (x% + 32, y%), ManaImg&(1)
  1997.             CASE 90 TO 94: _PUTIMAGE (x% + 32, y%), ManaImg&(2)
  1998.             CASE 85 TO 89: _PUTIMAGE (x% + 32, y%), ManaImg&(3)
  1999.             CASE 80 TO 84: _PUTIMAGE (x% + 32, y%), ManaImg&(4)
  2000.             CASE 75 TO 79: _PUTIMAGE (x% + 32, y%), ManaImg&(5)
  2001.         END SELECT '                                             Ù
  2002.     ELSEIF percent% > 49 THEN '                                  ¿
  2003.         _PUTIMAGE (x% + 8, y%), ManaImg&(1) '                    ³
  2004.         _PUTIMAGE (x% + 16, y%), ManaImg&(1) '                   ³
  2005.         _PUTIMAGE (x% + 32, y%), ManaImg&(5) '                   ³ 74 to 50 %
  2006.         SELECT CASE percent% '                                   ³
  2007.             CASE 70 TO 74: _PUTIMAGE (x% + 24, y%), ManaImg&(1)
  2008.             CASE 65 TO 69: _PUTIMAGE (x% + 24, y%), ManaImg&(2)
  2009.             CASE 60 TO 64: _PUTIMAGE (x% + 24, y%), ManaImg&(3)
  2010.             CASE 55 TO 59: _PUTIMAGE (x% + 24, y%), ManaImg&(4)
  2011.             CASE 50 TO 54: _PUTIMAGE (x% + 24, y%), ManaImg&(5)
  2012.         END SELECT '                                             Ù
  2013.     ELSEIF percent% > 24 THEN '                                  ¿
  2014.         _PUTIMAGE (x% + 8, y%), ManaImg&(1) '                    ³
  2015.         _PUTIMAGE (x% + 24, y%), ManaImg&(5) '                   ³
  2016.         _PUTIMAGE (x% + 32, y%), ManaImg&(5) '                   ³
  2017.         SELECT CASE percent% '                                   ³ 49 to 25 %
  2018.             CASE 45 TO 49: _PUTIMAGE (x% + 16, y%), ManaImg&(1)
  2019.             CASE 40 TO 44: _PUTIMAGE (x% + 16, y%), ManaImg&(2)
  2020.             CASE 35 TO 39: _PUTIMAGE (x% + 16, y%), ManaImg&(3)
  2021.             CASE 30 TO 34: _PUTIMAGE (x% + 16, y%), ManaImg&(4)
  2022.             CASE 25 TO 29: _PUTIMAGE (x% + 16, y%), ManaImg&(5)
  2023.         END SELECT '                                             Ù
  2024.     ELSE '                                                       ¿
  2025.         _PUTIMAGE (x% + 16, y%), ManaImg&(5) '                   ³
  2026.         _PUTIMAGE (x% + 24, y%), ManaImg&(5) '                   ³
  2027.         _PUTIMAGE (x% + 32, y%), ManaImg&(5) '                   ³
  2028.         SELECT CASE percent% '                                   ³
  2029.             CASE 20 TO 24: _PUTIMAGE (x% + 8, y%), ManaImg&(1) ' ³ 25 to 0 %
  2030.             CASE 15 TO 19: _PUTIMAGE (x% + 8, y%), ManaImg&(2) ' ³
  2031.             CASE 10 TO 14: _PUTIMAGE (x% + 8, y%), ManaImg&(3) ' ³
  2032.             CASE 5 TO 9: _PUTIMAGE (x% + 8, y%), ManaImg&(4) '   ³
  2033.             CASE 0 TO 4: _PUTIMAGE (x% + 8, y%), ManaImg&(5) '   ³
  2034.         END SELECT '                                             ³
  2035.     END IF '                                                     Ù
  2036.  
  2037. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  2038. SUB drawMenuBack (strX, strY, endX, endY)
  2039.     LINE (strX - 3, strY - 3)-(endX + 3, endY + 3), GREEN1, B
  2040.     LINE (strX - 2, strY - 2)-(endX + 2, endY + 2), GREEN2, B
  2041.     LINE (strX - 1, strY - 1)-(endX + 1, endY + 1), GREEN3, B
  2042.     LINE (strX, strY)-(endX, endY), GREEN4, BF
  2043. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  2044. SUB fatalError (fileNotFound$)
  2045.     CLS , GREEN4
  2046.     LOCATE 2, 2
  2047.     COLOR GREEN1, GREEN4
  2048.     PRINT "Fatal error: file " + fileNotFound$ + " not found"
  2049.     SLEEP
  2050.     unloadImages
  2051.     SYSTEM
  2052. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  2053. SUB drawMyFantasy ()
  2054.     drawMap
  2055.     'drawPortals
  2056.     'drawItemsOnGround
  2057.     drawMechs
  2058.     drawHero
  2059.     drawEnemies
  2060.     drawHUD
  2061. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  2062. FUNCTION fingerIsOnSurface% (begX%, begY%, imagePixelsX%, imagePixelsY%)
  2063.     IF ((Finger.x >= begX% AND Finger.x <= begX% + (imagePixelsX% - 1)) AND (Finger.y >= begY% AND Finger.y <= begY% + (imagePixelsY% - 1))) THEN
  2064.         fingerIsOnSurface% = TRUE
  2065.     ELSE
  2066.         fingerIsOnSurface% = FALSE
  2067.     END IF
  2068. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  2069.  
  2070.  
  2071. SUB doWithFinger () '°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°Û ACTION PERFORMING Û°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
  2072.  
  2073.     DIM sector%
  2074.     DIM priority%
  2075.  
  2076.     SELECT CASE actualMenuWorking%
  2077.         CASE 0
  2078.             IF gameTurn% = -1 THEN ' if it's the player turn
  2079.  
  2080.                 IF Finger.y > 31 THEN ' if Finger is in on the gameboard
  2081.                     sector% = checkFingerSector% ' lets get the playable sector where the Finger is
  2082.                     priority% = checkPriorityAtSector%(sector%)
  2083.                 END IF
  2084.                 '
  2085.                 SELECT CASE priority% '
  2086.                     '
  2087.                     CASE 0 ' there's nothing important (out of playable area)
  2088.                         _PUTIMAGE (Finger.x - 1, Finger.y - 1), FingerImg&(0) ' normal finger
  2089.  
  2090.  
  2091.                     CASE 1 ' there's an enemy
  2092.                         _PUTIMAGE (Finger.x - 1, Finger.y - 1), BonusImg&(3), , (16, 0)-(0, 16) ' attack mouse
  2093.                         printHUDpromt "Attack enemy"
  2094.                     CASE 2 'checkForMechs
  2095.  
  2096.                     CASE 3 'checkForItems
  2097.  
  2098.                     CASE 4 'checkForWorld
  2099.                         allowedMotions sector%
  2100.  
  2101.  
  2102.                 END SELECT
  2103.  
  2104.             ELSE ' CPU turn
  2105.                 _PUTIMAGE (Finger.x - 1, Finger.y - 1), BonusImg&(7) ' sand clock
  2106.             END IF
  2107.         CASE -1 'in pocket
  2108.             itemManipulation
  2109.             IF inHand.lvl = -1 THEN
  2110.                 _PUTIMAGE (Finger.x - 1, Finger.y - 1), FingerImg&(0) ' normal finger
  2111.             ELSE
  2112.                 _PUTIMAGE (Finger.x - 8, Finger.y - 8), BonusImg&(2) ' grabbing hand
  2113.             END IF
  2114.         CASE ELSE
  2115.             _PUTIMAGE (Finger.x - 1, Finger.y - 1), FingerImg&(0) ' on a menu
  2116.     END SELECT
  2117.  
  2118. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  2119. FUNCTION checkPriorityAtSector% (where%)
  2120.  
  2121.     DIM i%
  2122.  
  2123.     IF where% = 0 THEN '
  2124.         checkPriorityAtSector% = 0 '   Out of playable area
  2125.         EXIT FUNCTION '
  2126.     END IF '
  2127.  
  2128.     '1rst priority: ° ENEMIES °- - - - - - - - - - - - - - - - - - - - -
  2129.     FOR i% = 0 TO UBOUND(Enemy)
  2130.         IF Enemy(i%).map = actualMapWorking% THEN
  2131.             SELECT CASE where%
  2132.                 CASE 1
  2133.                     IF Enemy(i%).x = Hero.x - 32 AND Enemy(i%).y = Hero.y + 32 THEN
  2134.                         checkPriorityAtSector% = 1: EXIT FUNCTION
  2135.                     END IF
  2136.                 CASE 2
  2137.                     IF Enemy(i%).x = Hero.x AND Enemy(i%).y = Hero.y + 32 THEN
  2138.                         checkPriorityAtSector% = 1: EXIT FUNCTION
  2139.                     END IF
  2140.                 CASE 3
  2141.                     IF Enemy(i%).x = Hero.x + 32 AND Enemy(i%).y = Hero.y + 32 THEN
  2142.                         checkPriorityAtSector% = 1: EXIT FUNCTION
  2143.                     END IF
  2144.                 CASE 4
  2145.                     IF Enemy(i%).x = Hero.x - 32 AND Enemy(i%).y = Hero.y THEN
  2146.                         checkPriorityAtSector% = 1: EXIT FUNCTION
  2147.                     END IF
  2148.                 CASE 6
  2149.                     IF Enemy(i%).x = Hero.x + 32 AND Enemy(i%).y = Hero.y THEN
  2150.                         checkPriorityAtSector% = 1: EXIT FUNCTION
  2151.                     END IF
  2152.                 CASE 7
  2153.                     IF Enemy(i%).x = Hero.x - 32 AND Enemy(i%).y = Hero.y - 32 THEN
  2154.                         checkPriorityAtSector% = 1: EXIT FUNCTION
  2155.                     END IF
  2156.                 CASE 8
  2157.                     IF Enemy(i%).x = Hero.x AND Enemy(i%).y = Hero.y - 32 THEN
  2158.                         checkPriorityAtSector% = 1: EXIT FUNCTION
  2159.                     END IF
  2160.                 CASE 9
  2161.                     IF Enemy(i%).x = Hero.x + 32 AND Enemy(i%).y = Hero.y - 32 THEN
  2162.                         checkPriorityAtSector% = 1: EXIT FUNCTION
  2163.                     END IF
  2164.             END SELECT
  2165.         END IF
  2166.     NEXT i%
  2167.  
  2168.     '2nd priority: ° MECHS °- - - - - - - - - - - - - - - - - - - - - - - - - - -
  2169.     'I should create some Mechs first, shouldn't i? XD
  2170.  
  2171.     '3rd priority : ° ITEMS °- - - - - - - - - - - - - - - - - - - - - - - - - - -
  2172.     FOR i% = 0 TO UBOUND(Items)
  2173.         IF Items(i%).map = actualMapWorking% THEN
  2174.             'checkPriorityAtSector% = 3: EXIT FUNCTION
  2175.         END IF
  2176.     NEXT i%
  2177.  
  2178.     '4rth priority: ° WORLD °- - - - - - - - - - - - - - - - - - - - - - - -
  2179.     checkPriorityAtSector% = 4
  2180.  
  2181. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  2182. FUNCTION checkFingerSector% ()
  2183.  
  2184.     IF fingerIsOnSurface%(Hero.x - 32, Hero.y + 32, 32, 32) THEN '     sector 1
  2185.         checkFingerSector% = 1
  2186.     ELSEIF fingerIsOnSurface%(Hero.x, Hero.y + 32, 32, 32) THEN '      sector 2
  2187.         checkFingerSector% = 2
  2188.     ELSEIF fingerIsOnSurface%(Hero.x + 32, Hero.y + 32, 32, 32) THEN ' sector 3
  2189.         checkFingerSector% = 3
  2190.     ELSEIF fingerIsOnSurface%(Hero.x - 32, Hero.y, 32, 32) THEN '      sector 4
  2191.         checkFingerSector% = 4
  2192.     ELSEIF fingerIsOnSurface%(Hero.x, Hero.y, 32, 32) THEN '           sector 5
  2193.         checkFingerSector% = 5
  2194.     ELSEIF fingerIsOnSurface%(Hero.x + 32, Hero.y, 32, 32) THEN '      sector 6
  2195.         checkFingerSector% = 6
  2196.     ELSEIF fingerIsOnSurface%(Hero.x - 32, Hero.y - 32, 32, 32) THEN ' sector 7
  2197.         checkFingerSector% = 7
  2198.     ELSEIF fingerIsOnSurface%(Hero.x, Hero.y - 32, 32, 32) THEN '      sector 8
  2199.         checkFingerSector% = 8
  2200.     ELSEIF fingerIsOnSurface%(Hero.x + 32, Hero.y - 32, 32, 32) THEN ' sector 9
  2201.         checkFingerSector% = 9
  2202.     ELSE '                     nothing to do, further away from playable sectors
  2203.         checkFingerSector% = 0
  2204.     END IF
  2205.  
  2206. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  2207. SUB allowedMotions (where%)
  2208.  
  2209.     SELECT CASE where%
  2210.         CASE 1
  2211.             printHUDpromt "Move down & left" '                        ¿
  2212.             _PUTIMAGE (Finger.x - 8, Finger.y - 8), DirArrowImg&(9) ' ³
  2213.             IF Finger.clickL THEN '                                   ³
  2214.                 Hero.y = Hero.y + 32 '                                ³
  2215.                 Hero.x = Hero.x - 32 '
  2216.                 gameTurn% = 0
  2217.             END IF '                                                  ¾
  2218.         CASE 2
  2219.             printHUDpromt "Move down" '                                ¿
  2220.             _PUTIMAGE (Finger.x - 8, Finger.y - 8), DirArrowImg&(10) ' ³
  2221.             IF Finger.clickL THEN '                                    ³
  2222.                 Hero.y = Hero.y + 32 '
  2223.                 gameTurn% = 0
  2224.             END IF '                                                   ¾
  2225.         CASE 3
  2226.             printHUDpromt "Move down & right" '                       ¿
  2227.             _PUTIMAGE (Finger.x - 8, Finger.y - 8), DirArrowImg&(2) ' ³
  2228.             IF Finger.clickL THEN '                                   ³
  2229.                 Hero.y = Hero.y + 32 '                                ³
  2230.                 Hero.x = Hero.x + 32 '
  2231.                 gameTurn% = 0
  2232.             END IF '                                                  ¾
  2233.         CASE 4
  2234.             printHUDpromt "Move left" '                               ¿
  2235.             _PUTIMAGE (Finger.x - 8, Finger.y - 8), DirArrowImg&(7) ' ³
  2236.             IF Finger.clickL THEN '                                   ³
  2237.                 Hero.x = Hero.x - 32 '
  2238.                 gameTurn% = 0
  2239.             END IF '                                                  ¾
  2240.         CASE 5
  2241.             printHUDpromt "Rest one turn" '                         ¿
  2242.             _PUTIMAGE (Finger.x - 8, Finger.y - 8), FingerImg&(4) ' ¾
  2243.  
  2244.             '!!!!!!!!!!!!!!!!!!!!
  2245.             IF Finger.clickL THEN '                                   ³
  2246.                 gameTurn% = 0
  2247.             END IF '                                                  ¾
  2248.             '!!!!!!!!!!!!!!!!!!!!
  2249.  
  2250.  
  2251.         CASE 6
  2252.             printHUDpromt "Move right" '                              ¿
  2253.             _PUTIMAGE (Finger.x - 8, Finger.y - 8), DirArrowImg&(1) ' ³
  2254.             IF Finger.clickL THEN '                                   ³
  2255.                 Hero.x = Hero.x + 32 '
  2256.                 gameTurn% = 0
  2257.             END IF '                                                  ¾
  2258.         CASE 7
  2259.             printHUDpromt "Move up & left" '                          ¿
  2260.             _PUTIMAGE (Finger.x - 8, Finger.y - 8), DirArrowImg&(8) ' ³
  2261.             IF Finger.clickL THEN '                                   ³
  2262.                 Hero.y = Hero.y - 32 '                                ³
  2263.                 Hero.x = Hero.x - 32 '
  2264.                 gameTurn% = 0
  2265.             END IF '                                                  ¾
  2266.         CASE 8
  2267.             printHUDpromt "Move up" '                                 ¿
  2268.             _PUTIMAGE (Finger.x - 8, Finger.y - 8), DirArrowImg&(4) ' ³
  2269.             IF Finger.clickL THEN '                                   ³
  2270.                 Hero.y = Hero.y - 32 '
  2271.                 gameTurn% = 0
  2272.             END IF '                                                  ¾
  2273.         CASE 9
  2274.             printHUDpromt "Move up & right" '                         ¿
  2275.             _PUTIMAGE (Finger.x - 8, Finger.y - 8), DirArrowImg&(3) ' ³
  2276.             IF Finger.clickL THEN '                                   ³
  2277.                 Hero.y = Hero.y - 32 '                                ³
  2278.                 Hero.x = Hero.x + 32 '
  2279.                 gameTurn% = 0
  2280.             END IF '                                                  ¾
  2281.         CASE 0
  2282.             _PUTIMAGE (Finger.x - 1, Finger.y - 1), FingerImg&(0) ' normal finger
  2283.     END SELECT
  2284.  
  2285.  
  2286. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  2287.  
  2288. SUB readyToGo () ' STILL HAVE TO WORK ON to show the image of GO in the mouse
  2289.     DO
  2290.         _LIMIT 60
  2291.         CLS
  2292.         printHUDpromt "Your turn, " + Hero.id
  2293.         IF clockForFantasy% > 0 THEN
  2294.             clockForFantasy% = clockForFantasy% - 1
  2295.         ELSE
  2296.             clockForFantasy% = 120
  2297.         END IF
  2298.  
  2299.         _DISPLAY
  2300.     LOOP
  2301. '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  2302.  
  2303.  


fantasy1.png
* fantasy1.png (Filesize: 23.89 KB, Dimensions: 256x832, Views: 118)
* worlds4.txt (Filesize: 0.84 KB, Downloads: 83)

Offline Juan Tamarit

  • Newbie
  • Posts: 53
    • View Profile
Re: Fantasy
« Reply #12 on: June 15, 2021, 12:03:27 am »
Question that came up to my mind: do i need to have all these images loaded in variable arrays? Or is there a better an more efficient way to do this? I tried using a function where i loaded a main image, assign what i needed to a tmp&() array, coded the series of decision to choose wich of the indexes i wanted, assign that handle to the function, _freeing the file and exit the function... i didn't worked. Guess that _FREEIMAGE the handle and leaving the function leaves the function without nothing, right?

Offline bplus

  • Global Moderator
  • Forum Resident
  • Posts: 8053
  • b = b + ...
    • View Profile
Re: Fantasy
« Reply #13 on: June 15, 2021, 08:12:11 am »
Question that came up to my mind: do i need to have all these images loaded in variable arrays? Or is there a better an more efficient way to do this? I tried using a function where i loaded a main image, assign what i needed to a tmp&() array, coded the series of decision to choose wich of the indexes i wanted, assign that handle to the function, _freeing the file and exit the function... i didn't worked. Guess that _FREEIMAGE the handle and leaving the function leaves the function without nothing, right?

Not clear what you are asking.

Quote
do i need to have all these images loaded in variable arrays?
Do you mean saving the loaded image handles in an array? Yes, specially a Shared array if you have many that are associated with each other.

On the other hand working from a sheet of images you might use functions to _PUTIMAGE sections from that sheet, so just one handle for whole sheet Shared with those Function(s) that get particular parts of sheet.

Actually probably would use Subs not functions with _PutImage for showing sections of sheet image.
« Last Edit: June 15, 2021, 08:15:19 am by bplus »

Offline Juan Tamarit

  • Newbie
  • Posts: 53
    • View Profile
Re: Fantasy
« Reply #14 on: June 15, 2021, 05:27:55 pm »
Ok. Thank for replying, dear bro b+. Very interesting idea of FUNC or SUBS for using only the main sheet, i kind of loaded it in diferent pieces and then _freeit, from there on i just work with the pieces. By the way ¿Is this more memory consuming or is the same? Is the same, right?

Im reorganizing this program a bit. I felt like the general program was a disorder, too much focused on the menus, forcing me to get into another loop for working with the enemies, etc... Im gonna try to fit everything in a single loop and take the focus out of the menus a bit. Hard maintance work i guess. Also modding the aspect of things a bit. I'll come back when i have it more organized and nice.

I still open to comments, opinions, critics, everything

Cheers