Jump to content

Custom Ingame menu


PatrickW

Recommended Posts

This posting will present all the new opcodes to create ingame menu's

 

I've coined the name "panel" for these things, as they are not only used to display ingame menu's (like in ammunations, mod-chops ) but also to display static/dynamic information ( e.g. during missions).

 

A panel consists of one or more columns of information, and can contain upto 12 rows of data.

 

Here's a screen from a custom menu ( still needs some good texts) that I'm working on for my new mod:

user posted image

 

Here's a listing of all the opcodes involved in panels:

 

08d4=9, Create_panel

param 1: title, displayed in the SA font at the top of the panel

param 2: left panel position ( for some reason a float)

param 3: top panel position ( for some reason a float)

param 4: width ( for some reason a float)

param 5: number of columns

param 6: interactive-flag, if set the panel acts as a menu, with a row selected

param 7: background-flag, panel has a dark background

param 8: default alignment of text ( 0=centre, 1=left, 2=right)

param 9: handle, the created panel

 

08da=1,Remove_panel

param 1: handle of the panel to be removed

 

08db=15,Set_panel_column_data

param 1: handle of the panel

param 2: column number [0,1,2.......]

param 3: column header

param 4..5: column_data

 

08ee=5,Set_panel_data_text1

param 1: handle of the panel

param 2: column number [0,1,2.......]

param 3: row number [0..11]

param 4: column data text

param 5: column data int argument

 

08ef=6,Set_panel_data_text2

param 1: handle of the panel

param 2: column number [0,1,2.......]

param 3: row number [0..11]

param 4: column data text

param 5: column data int argument 1

param 6: column data int argument 2

 

09db=3,Set_panel_column_width

param 1: handle of the panel

param 2: column number [0,1,2.......]

param 3: column width ( this time it's an int )

 

08d6=3,Set_panel_column_alignment

param 1: handle of the panel

param 2: column number [0,1,2.......]

param 3: alignment of text ( 0=centre, 1=left, 2=right)

 

08d9=3,Set_panel_row_enable

param 1: handle of the panel

param 2: row number [0..11]

param 3: 0->disabled, 1->enabled

 

090e=2,Set_panel_active_row

param 1: handle of the panel

param 2: row number [0..11]

 

08d7=2,Get_panel_active_row

param 1: handle of the panel

param 2: variable to receive the row number [0..11]

 

08d8=2,Get_panel_selected_row

param 1: handle of the panel

param 2: variable to receive the row number [0..11]

 

 

The difference between the last two opcodes, is not completely clear. the first one is used, while the "select"-key (spacebar) is still pressed, and the latter is used after it has been released again. This is how R* code uses them.

 

A simple example of a menu with three items

 

0512: permanent text box 'CLOTHA' 01B4: set player $PLAYER_CHAR frozen state  0 (frozen)08D4: 'DNC_019' 29.0 145.0 200.0 2 1 1 1 $my_panel  08DB: $my_panel  0 'MTOR02C' 'IE1' 'IE2' 'IE3' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY'   :keywait0001: wait  0 ms if 000E1:   key pressed  0  15jf ��test_select    ;;-------------------------; menu aborted;;-------------------------08DA: $my_panel 03E6: remove text box01B4: set player $PLAYER_CHAR frozen state  1 (unfrozen)jump ��the_end          :test_selectif 000E1: key pressed  0  16jf ��keywait  ;;--------------------------; item selected;;--------------------------08D7: $my_panel $choice 08DA: $my_panel 03E6: remove text box; do someting useful with $choice:the_end

 

 

 

 

 

 

 

Edited by PatrickW
bS8xA.png
Link to comment
Share on other sites

excellent work patrick smile.gif

 

now, time to change the font of that "The master!" text... biggrin.gif

Link to comment
Share on other sites

  • 2 weeks later...
Quadropheniac90

Just one question: What do you do with choice? Do I have to make an if-check like:

 

:Choice1

00D6: if 0

CODE: $choice == 0 (The first row)

CODE: jump_if_false Choice2

0001: wait 0 ms

CODE: create_car #BANSHEE

CODE: end_thread

 

:Choice2

00D6: if 0

CODE: $choice == 1 (The second row)

CODE: jump_if_false Choice3

0001: wait 0 ms

CODE: create_car #BULLET

CODE: end_thread

 

Etcetera...

 

Or something else? confused.gif

user posted image
Link to comment
Share on other sites

Just one question: What do you do with choice? Do I have to make an if-check like:

 

:Choice1

00D6: if 0

CODE: $choice == 0 (The first row)

CODE: jump_if_false Choice2

0001: wait 0 ms

CODE: create_car #BANSHEE

CODE: end_thread

 

:Choice2

00D6: if 0

CODE: $choice == 1 (The second row)

CODE: jump_if_false Choice3

0001: wait 0 ms

CODE: create_car #BULLET

CODE: end_thread

 

Etcetera...

 

Or something else? confused.gif

That completely depends on your mod, if you only have two or three choices, your method will do, but when you get to a situation where you have more choices there are two prefered alternatives:

* Use the jumptable opcodes (0871&0872), which basicly implements a switch-statement ( as availabl in most proper programming languages:

something like this

switch($choice) {case 0:   jump ££label_for0   break;case 1:   jump ££label_for1   break;case 2:   jump ££label_for2   break;default:   jump ££label_for_default   break;}

 

 

would lead to the following opcode:

 

0871: init_jump_table $choice total_jumps  3  1 ££label_for_default jumps  0 ££label_for0 1 ££label_for1  2 ££label_for2  0 -1 0 -1  0 -1  0 -1 

 

params:

1 : switch variable

2 : number of regular cases

3 : default availalble flag (if default case is not needed, this is 0 )

4 : jump label for the default case

5 : case-value for the first case

6 : jump_label for the first case

7-18 : case-value/jump_labe; pairs for the other cases.

 

If there are more than 7 cases, the rest of the cases should be given in subsequent 0872: opcodes, which can hold opto 9 case-value/jump_label pairs.

 

 

* a second method of using the $choice, would be to use it as an index for an array.

 

 

 

Hope this helps you further...

bS8xA.png
Link to comment
Share on other sites

Quadropheniac90

Thanks, am0n, that really helps!

 

Does the Menu Title have to be in the .gxt file?

user posted image
Link to comment
Share on other sites

Quadropheniac90

Yay, the menu works, now I just have to get a piece of code which lets the game do something when an option is selected... Dunno how to continue the thread, do I have to change this:

 

 

:CUSTOM_MENU_6; selected button 'OPTION1' (0)0002: jump ££CUSTOM_MENU_END

 

 

to this:

 

 

:CUSTOM_MENU_6; selected button 'OPTION1' (0)0002: jump ££CUSTOM_MENU_END0002: jump ££CUSTOM_MENU_CHOICE1

 

 

or something?

user posted image
Link to comment
Share on other sites

Yay, the menu works, now I just have to get a piece of code which lets the game do something when an option is selected... Dunno how to continue the thread, do I have to change this:

 

 

:CUSTOM_MENU_6; selected button 'OPTION1' (0)0002: jump ££CUSTOM_MENU_END

 

 

to this:

 

 

:CUSTOM_MENU_6; selected button 'OPTION1' (0)0002: jump ££CUSTOM_MENU_END0002: jump ££CUSTOM_MENU_CHOICE1

 

 

or something?

 

example :

 

:CUSTOM_MENU_6; selected button 'OPTION1' (0)00A1: put_actor $PLAYER_ACTOR at  428.3045 2536.698  16.375520002: jump ££CUSTOM_MENU_END

 

Link to comment
Share on other sites

Quadropheniac90
OK, thanks. Still need to sort some sh*t out...
user posted image
Link to comment
Share on other sites

Ok so what's wrong with my code? I'm a newbye at coding but i tried to do my best and still can't find whats wrong ... the game just crashes ... oh and about all those threads well i wanted to show where i put my create_thread is it there were it should be ? (MAIN) ... or is that what's wrong ... ?

Please help me

Thanks

It seems that you pasted the _whole_ code at the MAIN part of script; only 'create_thread' part belongs there, move everything else outside, ie. at the end of script.

Link to comment
Share on other sites

is it possible to create a menu with the options to type in values?

like number of ammo or even coords

Link to comment
Share on other sites

Nope, there is no easy data entry method for the menu, of course you could use the method used to determine the bet-amount in casino's. And there's also some data-entry code in the high-score handling of the ingame video-games, but these are very complicated to code.

 

bS8xA.png
Link to comment
Share on other sites

well as my father (and half of mankind) used to (and still) say little is better then nothing

thanks

Link to comment
Share on other sites

  • 4 weeks later...
spaceeinstein
09d6=3,Set_panel_column_alignment

param 1: handle of the panel

param 2: column number [0,1,2.......]

param 3: alignment of text ( 0=centre, 1=left, 2=right)

 

09d6=3,Set_panel_row_enable

param 1: handle of the panel

param 2: row number [0..11]

param 3: 0->disabled, 1->enabled

Uhhh... Wtf?

Link to comment
Share on other sites

spaceeinstein
Maybe I wasn't clear but those two opcodes above me are wrong.
Link to comment
Share on other sites

Craig Kostelecky

Well, what's wrong with them? Are they incorrectly named? Or are the parameters wrong? You didn't really elaborate at all (even in your second post) about why it's wrong. dontgetit.gif

Link to comment
Share on other sites

spaceeinstein

blink.gif How can you not see it?

09d6=3,Set_panel_column_alignment

09d6=3,Set_panel_row_enable

They are the same, and 09d6 has 5 params.

Link to comment
Share on other sites

in my ini i have

08d6=3,set_panel_col_alignment

08d9=3,set_panel_row_enabled

but that might be an incorrect guess.

Link to comment
Share on other sites

Thanks for spotting those space-einstein. cookie.gif

The ones that CyQ ( cookie.gif ) listed are indeed the correct ones..

 

So much for ctrl-C/ctrl-V being a handy tool suicidal.gif

 

I've corrected the first post..

 

bS8xA.png
Link to comment
Share on other sites

Quadropheniac90
How many 'options' can the menu have? Edited by teun.steenbekkers
user posted image
Link to comment
Share on other sites

GTASan Andreas CJ Rules

can sum1 like explain this is in n00b format. (i can spawn cars tho)

Link to comment
Share on other sites

  • 2 weeks later...

No. It's already as simple as it can get. If that's above your coding level, then either develop your skills, get somebody to do it for you, or abandon the idea.

 

Of course, if you just explained which part you feel is over your head, maybe somebody would be better able to explain it. Just saying you'd like it in newbie terms doesn't get you anywhere.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • 1 User Currently Viewing
    0 members, 0 Anonymous, 1 Guest

×
×
  • Create New...

Important Information

By using GTAForums.com, you agree to our Terms of Use and Privacy Policy.