Home
JAQForum Ver 24.01
Log In or Join  
Active Topics
Local Time 05:52 27 Nov 2024 Privacy Policy
Jump to

Notice. New forum software under development. It's going to miss a few functions and look a bit ugly for a while, but I'm working on it full time now as the old forum was too unstable. Couple days, all good. If you notice any issues, please contact me.

Forum Index : Microcontroller and PC projects : PICO PETSCII

     Page 38 of 38    
Author Message
Bleep
Guru

Joined: 09/01/2022
Location: United Kingdom
Posts: 509
Posted: 09:17am 08 Dec 2023
Copy link to clipboard 
Print this post

Hi Harm & Peter,
All of those suggestions are very useful and interesting, I'm amazed that crunching the program saves 10mS, as you say not worth it for now, unless really necessary. Would you like me to look at some of Peter's other suggestions?
Regards Kevin.
 
Volhout
Guru

Joined: 05/03/2018
Location: Netherlands
Posts: 4239
Posted: 09:45am 08 Dec 2023
Copy link to clipboard 
Print this post

Hi Kevin,

Please go ahead and try to implement Peters suggestions.
I started using CHOICE recently. In beginning it is much easier to use IF THEN ELSE since you can also embed executable code. CHOICE only works on variables.

Dimming strings may add more code than it saves in HEAP size. And INC I am using quite a lot already.

I will await your efforts. Please use THIS as starting point (it is my current "work in progress" equal to "pet25n.bas" with an EMP optimization in AI.

pet25p.zip

Regards,

Volhout

P.S. CHOICE saves 10% (0.003ms) over IF THEN ELSE
    INC x,1 saves 17% (0.003ms) over x=x+1
    So the gain is little, try to focus on program area's that are called often.
Edited 2023-12-08 20:27 by Volhout
PicomiteVGA PETSCII ROBOTS
 
Martin H.

Guru

Joined: 04/06/2022
Location: Germany
Posts: 1113
Posted: 02:53pm 08 Dec 2023
Copy link to clipboard 
Print this post

hmm bombs doesn't kill robots anymore?
ok now they do, maybe a problem with my Game*Mite
Edited 2023-12-09 00:57 by Martin H.
'no comment
 
LeoNicolas

Guru

Joined: 07/10/2020
Location: Canada
Posts: 479
Posted: 03:05pm 08 Dec 2023
Copy link to clipboard 
Print this post

How are you profiling the game code? Has MMBasic a tool or some way to generate profiling data?
 
Volhout
Guru

Joined: 05/03/2018
Location: Netherlands
Posts: 4239
Posted: 03:18pm 08 Dec 2023
Copy link to clipboard 
Print this post

Hi LeoNicolas,

The game has a main loop. The main loop is used to time synchronize everything.
The main loop is executed every 100ms (10fps). In the video screen the time is displayed that the main loop actualy uses (i.e. 85ms).

I visually check this while running the game.

The 95% result is because I curiously added 2 lines of code, one to count the loops, 1 to sum the times. Then at the end do the division. And that came to 93ms average (93%).

So no profiling tool, only something I coded myself.

Volhout
Edited 2023-12-09 01:18 by Volhout
PicomiteVGA PETSCII ROBOTS
 
Martin H.

Guru

Joined: 04/06/2022
Location: Germany
Posts: 1113
Posted: 04:08pm 08 Dec 2023
Copy link to clipboard 
Print this post

LeoNicolas

If you are interested to crate a CMM2/MMB4W Version:
  Martin H. said  so far so good

W-PET20_2.zip

Maybe a CMM2 Expert will continue converting it


this test was based on the PET20 Version.
so you "just have to" copy the Screen,Animation related routines and replace them whit those I used
'no comment
 
thwill

Guru

Joined: 16/09/2019
Location: United Kingdom
Posts: 4040
Posted: 04:21pm 08 Dec 2023
Copy link to clipboard 
Print this post

I may be imagining it, but didn't Peter enhance the PicoMite{VGA} or CMM2 with a  "profiling" feature that would report "hot" pieces of code, i.e. those that were called very frequently. Not sure if that feature is still present or how you enable it.

Best wishes,

Tom
Edited 2023-12-09 02:36 by thwill
Game*Mite, CMM2 Welcome Tape, Creaky old text adventures
 
Martin H.

Guru

Joined: 04/06/2022
Location: Germany
Posts: 1113
Posted: 04:31pm 08 Dec 2023
Copy link to clipboard 
Print this post

  thwill said   Not sure if that feature is still present or how you enable it.

Best wishes,

Tom

I used the Things that the CMM2 has more than the Pico  
I managed everything using Pages. 2 Pages for Tiles 1 for Sprites and one page to buildup the Screen and merge the Sprites, at the end Page 1 is copied to page 0 (the vissible screen)
Instead of the memory address of the Tile/Sprites-source, I created x,y,page coordinates of the individual tiles in an array.
'no comment
 
thwill

Guru

Joined: 16/09/2019
Location: United Kingdom
Posts: 4040
Posted: 04:34pm 08 Dec 2023
Copy link to clipboard 
Print this post

  Martin H. said  I used the Things that the CMM2 has more than the Pico ...


I'm not sure why you quoted me Martin as your reply had nothing to do with anything I said ;-)

EDIT: What I was referring to was OPTION PROFILING and having had a google around TBS it is/was a CMM2 feature not a PicoMite feature: https://www.thebackshed.com/forum/ViewTopic.php?TID=13459&PID=16#16#163977

Best wishes,

Tom
Edited 2023-12-09 02:41 by thwill
Game*Mite, CMM2 Welcome Tape, Creaky old text adventures
 
Bleep
Guru

Joined: 09/01/2022
Location: United Kingdom
Posts: 509
Posted: 06:41pm 08 Dec 2023
Copy link to clipboard 
Print this post

Hi Harm,
Here is a modified version of pet25p I have reduced some strings to 8, modified any Inc or Choice I could find (not many), I doubt it has made any speed difference and I'm unsure how to tell if any memory has been saved, it wouldn't be much anyway.
Feel free to use or not, probably needs a good test, in case I've damaged anything. :-(

pet25p_k.bas.zip

Regards Kevin.
 
Volhout
Guru

Joined: 05/03/2018
Location: Netherlands
Posts: 4239
Posted: 10:16pm 08 Dec 2023
Copy link to clipboard 
Print this post

Hi Kevin,

I have used some of your suggestions.

Thank you

Volhout
PicomiteVGA PETSCII ROBOTS
 
thwill

Guru

Joined: 16/09/2019
Location: United Kingdom
Posts: 4040
Posted: 03:53pm 09 Dec 2023
Copy link to clipboard 
Print this post

Hi folks,

My latest offering based on pet25p:

   pet25p-thwill-1.zip

Bugs fixed:

- Fixed missing underscore in variable/function name 'ctrl_wii_classic'.
- Fixed implementation of kill_kb() which (for controllers) was broken by my earlier changes to read_input$() to suppress auto-repeat.

Code cosmetic changes:

- Renamed kill_kb() => flush_input() as that is a more accurate description of what it does.
- Renamed "escape" action to "quit".

UI tweaks:

- Made A/Fire act as "use-item" on the intro screen so it can be used for selection / to start the game.
- Changed "kill" to "destroy" in one message, I think you "destroy" robots, not "kill" them, YMMV.
- Improved UI feedback from map:
  - Pressing the "map" button now always beeps.
  - A message is written describing the current map mode.
- When a controller is configured the messages associated with "quiting" say SELECT rather than ESCAPE.

For what it's worth I don't think it is quite "cooked" yet and would benefit from another month's playtesting and tweaking ... that said the concept of "release" is pretty meaningless as there are no publishing channels .

Best wishes,

Tom
Edited 2023-12-10 01:54 by thwill
Game*Mite, CMM2 Welcome Tape, Creaky old text adventures
 
thwill

Guru

Joined: 16/09/2019
Location: United Kingdom
Posts: 4040
Posted: 04:29pm 09 Dec 2023
Copy link to clipboard 
Print this post

Oops, try this one instead:
   
   pet25p-thwill-2.zip

Best wishes,

Tom
Game*Mite, CMM2 Welcome Tape, Creaky old text adventures
 
thwill

Guru

Joined: 16/09/2019
Location: United Kingdom
Posts: 4040
Posted: 04:35pm 09 Dec 2023
Copy link to clipboard 
Print this post

Bug in the game logic (which I'm leaving alone):

If you walk into the trash compactor then you get lots of "object crushed" (which I think should start with a capital letter) messages instead of a single "Player terminated!" message, which again I think should start with a capital letter, and in this case end with an exclamation mark.

Best wishes,

Tom
Game*Mite, CMM2 Welcome Tape, Creaky old text adventures
 
Volhout
Guru

Joined: 05/03/2018
Location: Netherlands
Posts: 4239
Posted: 05:56pm 09 Dec 2023
Copy link to clipboard 
Print this post

Hi Tom,

Real good feedback. It is fixed in "robots_rc1.bas" see new thread.
The "Player terminated" was printed but invisible since there where multiple "object crushed" after it.
The "object crushed" was a bug.

Thanks,

Volhout
PicomiteVGA PETSCII ROBOTS
 
Martin H.

Guru

Joined: 04/06/2022
Location: Germany
Posts: 1113
Posted: 09:28am 10 Dec 2023
Copy link to clipboard 
Print this post

@Volhout

Replace this Block and we have a Start Menu without the "Controlls" Entry.
Sub show_intro
 'load screen
 FRAMEBUFFER write l:CLS :FRAMEBUFFER write sc$
 Load image path$("images/introscreen.bmp"),0,10
 FRAMEBUFFER write l: fade_in: :FRAMEBUFFER write sc$
 Local integer puls(11)=(0,1,9,11,3,6,7,6,5,11,9,1),t,t2
 Local Message$(4) length 40

 'set Map to 0, Menu State to 1
 Message$(1)="...use UP & DOWN, Space or 'Start'      "
 Message$(2)="   ...use LEFT & RIGHT to select Map    "
 Message$(3)="  ...use LEFT & RIGHT cange Difficulty  "
 Dim DIFF_LEVEL_WORD$(2) length 6 =("EASY  ","NORMAL","HARD  ")
 Map_Nr=0:MS=1:Difficulty=1

 ' start playing the intro Music
 Play Modfile path$("music/metal_heads-sfx.mod")
 show_menu 1

 'Display Map Name
 Text 9,70,UCase$(map_nam$(Map_Nr))

 '--- copyright notices etc
 Text 0,224,Message$(1),,,,col(3)
 Local msg$ = String$(36,32)
 '  Cat msg$, sys.get_config$("device", "Generic " + Mm.Device$) + " - "
 Inc msg$, "Original Game by David Murray - "
 Inc msg$, "Port to Mite and MM-Basic by Volhout, Martin H and thebackshed-"
 Inc msg$, "Community - Music by Noelle Aman, Graphic by "
 Inc msg$, "Piotr Radecki - MMBasic by Geoff Graham and Peter Mather "
 flip=0
 MT=0

 'check player choice
 kill_kb
 Do
   If flip=0 Then Inc MT:If mt>Len(msg$) Then MT=0
   tp$=Mid$(msg$,1+MT,41)
   If t2=0 Then 'once every 4 cycles
     k$=read_input$()
     If k$<>"" Then
       Play modsample s_beep-2,4
       If k$="down" Then Inc MS,(MS<3)
       If k$="up" Then Inc MS,-(MS>1)
       If k$="use-item" Then
         Select Case MS
           Case 1
             FRAMEBUFFER write L:fade_out:FRAMEBUFFER write sc$
             Exit 'intro and go on with the Program
           Case 2
             'select map
             kill_kb
             Text 0,224,message$(2),,,,col(3)
             Do
               k$=read_input$()
               If k$<>"" Then
                 Play modsample s_beep-2,4
                 If k$="left" Then Inc Map_Nr,-(Map_Nr>0)
                 If k$="right" Then Inc Map_Nr,(Map_Nr<13)
                 If k$="use-item" Then
                   Text 0,224,message$(1),,,,col(3): Exit
                 EndIf
                 Text 9,70,"                "
                 Text 9,70,UCase$(map_nam$(Map_Nr))
                 If LCD_DISPLAY Then FRAMEBUFFER Merge 9,b
               EndIf
               Pause 200
             Loop
             kill_kb
           Case 3
             'select DIFFICULTY
             kill_kb
             Text 0,224,message$(3),,,,col(3)
             Do
               k$=read_input$()
               If k$<>"" Then
                 Play modsample s_beep-2,4
                 If k$="use-item" Then
                   Text 0,224,message$(1),,,,col(3)
                   Text 0,232,"      "
                   Exit
                 EndIf
                 If k$="left" Then
                   Inc Diff_Level,-(Diff_Level>0)
                 EndIf
                 If k$="right" Then
                   Inc Diff_Level,(Diff_Level<2)
                 EndIf
                 Text 0,232,DIFF_LEVEL_WORD$(Diff_Level)
                 Load image path$("images/face_"+Str$(Diff_Level)+".bmp"),234,85
                 If LCD_DISPLAY Then FRAMEBUFFER Merge 9,b
               EndIf
               Pause 200
             Loop
             kill_kb
            End Select
       EndIf
     EndIf
   EndIf

   show_menu MS,col(puls(t))

   Text 8-(2*flip),0,tp$,,,,col(2):flip=(flip+1) And 3
   Inc t: t=t Mod 12 'color change
   Inc t2: t2=t2 Mod 3 'reponse time keys
   If LCD_DISPLAY Then FRAMEBUFFER Merge 9,b
   Pause 50
 Loop
 Play stop
End Sub


 'remove duplicate keys and key repeat
Sub kill_kb
 Do While read_input$() <> "" : Loop
End Sub


 'start menu selection list
Sub show_menu(n1,FC)
 Local tc,BG=0,f2=col(10)
 tc=f2 :If n1=1 Then tc=FC
 Text 32,30,"START GAME",,,,tc
 tc=f2 : :If n1=2 Then tc=FC
 Text 32,38,"SELECT MAP",,,,tc
 tc=f2 : :If n1=3 Then tc=FC
 Text 32,46,"DIFFICULTY",,,,tc
End Sub

Edited 2023-12-10 19:31 by Martin H.
'no comment
 
     Page 38 of 38    
Print this page


To reply to this topic, you need to log in.

© JAQ Software 2024