|
 |
|
|
|
|
|
GTA Modification Forums
Custom Ingame menu New opcodes and their usage
 |
|
 |
| |
PatrickW  |
Posted: Wednesday, Jun 29 2005, 01:28
|
GTA Juggernaut

Group: Moderators
Joined: Jan 7, 2004



|
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:
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
| CODE | 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'
:keywait 0001: wait 0 ms if 0 00E1: key pressed 0 15 jf ��test_select ;;------------------------- ; menu aborted ;;------------------------- 08DA: $my_panel 03E6: remove text box 01B4: set player $PLAYER_CHAR frozen state 1 (unfrozen) jump ��the_end :test_select if 0 00E1: key pressed 0 16 jf ��keywait ;;-------------------------- ; item selected ;;-------------------------- 08D7: $my_panel $choice 08DA: $my_panel 03E6: remove text box
; do someting useful with $choice
:the_end
|
This post has been edited by PatrickW on Saturday, Aug 20 2005, 05:25
|
|
|
|
|
 |
|
 |
 |
|
 |
| |
Eclipse_nl  |
Posted: Wednesday, Jun 29 2005, 19:15
|
Grand Tani Islands

Group: Members
Joined: Sep 11, 2004


|
Nice Patrick ...I'm going to play with it.
|
|
|
|
|
 |
|
 |
 |
|
 |
| |
teun.steenbekkers  |
|
Confused Clown

Group: Andolini Mafia Family
Joined: Feb 15, 2005


|
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?
|
|
|
|
|
 |
|
 |
 |
|
 |
| |
PatrickW  |
|
GTA Juggernaut

Group: Moderators
Joined: Jan 7, 2004



|
| QUOTE (teun.steenbekkers @ Jul 10 2005, 23:46) | 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? | 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| CODE | 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:
| CODE | 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...
|
|
|
|
|
 |
|
 |
 |
|
 |
| |
am0n  |
Posted: Wednesday, Jul 13 2005, 05:49
|
Player Hater

Group: Members
Joined: Jan 16, 2005

|
|
|
|
|
|
 |
|
 |
 |
|
 |
| |
teun.steenbekkers  |
Posted: Wednesday, Jul 13 2005, 08:27
|
Confused Clown

Group: Andolini Mafia Family
Joined: Feb 15, 2005


|
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:
| CODE | :CUSTOM_MENU_6 ; selected button 'OPTION1' (0) 0002: jump ££CUSTOM_MENU_END |
to this:
| CODE | :CUSTOM_MENU_6 ; selected button 'OPTION1' (0) 0002: jump ££CUSTOM_MENU_END 0002: jump ££CUSTOM_MENU_CHOICE1 |
or something?
|
|
|
|
|
 |
|
 |
 |
|
 |
| |
0 User(s) are reading this topic (0 Guests and 0 Anonymous Users)
0 Members:
Pages:
(2) [1] 2
Track this topic
Receive email notification when a reply has been made to this topic and you are not active on the board.
Subscribe to this forum
Receive email notification when a new topic is posted in this forum and you are not active on the board.
Download / Print this Topic
Download this topic in different formats or view a printer friendly version.
| |
 |
|
 |
|
|
|
|