Descrição
Logo ao iniciar a criação do
Tuning Mod v2, antes eu resolvi criar um novo sistema de GUI (interface gráfica) para deixar o mod mais bonito.
Mesmo antes de iniciar já dei o nome de "
Shine GUI" e criei a primeira função: Criar um quadrado com borda.
Logo depois resolvi adicionar algum texto para este quadrado, e adicionei as funcionalidades de adição de um texto com formatação.
Por minha surpresa, eu acabei criando TODA a interface do mod somente com esta função. Realmente, é uma função simples mas muito dinâmica.
Não é uma coisa que "
dá tudo mastigado para você", é uma coisa também um pouco manual, mas gostei de trabalhar assim e espero que isso seja útil para vocês também.
Só é útil caso você esteja querendo criar uma interface realmente bem personalizada, pois não é uma solução tão simples e rápida, mas você tem o
total controle gráfico.
Sanny Builder
Uso:
Código: Selecionar tudo
0AB1: call_scm_func @GUI_DrawBoxOutline_WithText 20 PosX 320.0 PosY 240.0 SizeX 200.0 SizeY 200.0 RGBA 0 0 0 180 OutlineSize 1.4 OutlineSides 1 1 1 1 OutlineRGBA 200 200 200 200 TextID -1 FormatID 1 Padding 3.0
É a linha que você irá usar para criar alguma coisa. Basta chamar esta linha com suas configurações e está pronto.
Função:
Código: Selecionar tudo
:GUI_DrawBoxOutline_WithText
{
0AB1: call_scm_func @GUI_DrawBoxOutline_WithText 20 PosX 320.0 PosY 240.0 SizeX 200.0 SizeY 200.0 RGBA 0 0 0 180 OutlineSize 1.4 OutlineSides 1 1 1 1 OutlineRGBA 200 200 200 200 TextID -1 FormatID 1 Padding 3.0
0@ = posx
1@ = posy
2@ = sizex
3@ = sizey
4@ = r
5@ = g
6@ = b
7@ = a
8@ = outline size
9@ = outline side top
10@ = outline side right
11@ = outline side bottom
12@ = outline side left
13@ = outline r
14@ = outline g
15@ = outline b
16@ = outline a
17@ = textid
18@ = formatid
19@ = padding
}
// - Create Box
if 7@ > 0 // Box
then
03E3: set_texture_to_be_drawn_antialiased 1
038E: draw_box_position 0@ 1@ size 2@ 3@ RGBA 4@ 5@ 6@ 7@
end
// - Create Outlines
if 12@ == true //outline side left
then
gosub @GUI_DrawBoxOutline_VarsBoxToOutline
22@ /= 2.0
0063: 20@ -= 22@
03E3: set_texture_to_be_drawn_antialiased 1
038E: draw_box_position 20@ 21@ size 8@ 3@ RGBA 13@ 14@ 15@ 16@
end
if 9@ == true //outline side top
then
gosub @GUI_DrawBoxOutline_VarsBoxToOutline
23@ /= 2.0
0063: 21@ -= 23@
03E3: set_texture_to_be_drawn_antialiased 1
038E: draw_box_position 20@ 21@ size 2@ 8@ RGBA 13@ 14@ 15@ 16@
end
if 10@ == true //outline side right
then
gosub @GUI_DrawBoxOutline_VarsBoxToOutline
22@ /= 2.0
005B: 20@ += 22@
03E3: set_texture_to_be_drawn_antialiased 1
038E: draw_box_position 20@ 21@ size 8@ 3@ RGBA 13@ 14@ 15@ 16@
end
if 11@ == true //outline side bottom
then
gosub @GUI_DrawBoxOutline_VarsBoxToOutline
23@ /= 2.0
005B: 21@ += 23@
03E3: set_texture_to_be_drawn_antialiased 1
038E: draw_box_position 20@ 21@ size 2@ 8@ RGBA 13@ 14@ 15@ 16@
end
// - Create Text
if 17@ > 0 // Text
then
0AD3: 10@s = format "_MY_%i" 17@
// Do Padding
gosub @GUI_DrawBoxOutline_VarsBoxToOutline
if 19@ > 0.0 // Padding Left/Right
then // to right
22@ /= 2.0
0063: 20@ -= 22@
else // to left
22@ /= 2.0
005B: 20@ += 22@
end
005B: 20@ += 19@
// Text formats IDs
if 18@ == 1 //Menu Item
then
0AC6: 22@ = label @GUI_Memory_ActiveItem offset
0A8D: 22@ = read_memory 22@ size 4 vp 0
if 003B: 22@ == 17@
then 18@ = 2 //Menu Item ACTIVE
end
end
if 18@ == 3 //Small Menu
then
0AC6: 22@ = label @GUI_Memory_ActiveItem offset
0A8D: 22@ = read_memory 22@ size 4 vp 0
if 003B: 22@ == 17@
then 18@ = 4 //Small Menu ACTIVE
end
end
0AB1: call_scm_func @GUI_SetTextFormatByID 1 ID 18@ -> PaddingBottom 25@
0063: 21@ -= 25@
033E: set_draw_text_position 20@ 21@ GXT 10@s
end
0AB2: ret 0
// --- Format IDs
:GUI_SetTextFormatByID
if 0@ == 1
then
gosub @GUI_TextFormat_ItemMenu
0AB2: ret 1 6.0
end
if 0@ == 2
then
gosub @GUI_TextFormat_ItemMenu_Active
0AB2: ret 1 6.0
end
if 0@ == 3
then
gosub @GUI_TextFormat_SmallMenu
0AB2: ret 1 5.0
end
if 0@ == 4
then
gosub @GUI_TextFormat_SmallMenu_Active
0AB2: ret 1 5.0
end
if 0@ == 5
then
gosub @GUI_TextFormat_SmallItem
0AB2: ret 1 6.0
end
if 0@ == 6
then
gosub @GUI_TextFormat_MediumItem
0AB2: ret 1 6.0
end
if 0@ == 7
then
gosub @GUI_TextFormat_VerySmallItem_Trans
0AB2: ret 1 1.0
end
0AB2: ret 0
:GUI_TextFormat_ItemMenu //1
0340: set_text_draw_RGBA 240 240 240 255
0349: set_text_draw_font 2
0343: set_text_draw_linewidth 640.0
081C: draw_text_outline 1 RGBA 0 0 0 100
033F: set_text_draw_letter_size 0.3 1.0
0348: enable_text_draw_proportional 1
return
:GUI_TextFormat_ItemMenu_Active //2
0AC6: 10@ = label @GUI_Memory_ItemMenuActive_PulseColor offset
0A8D: 10@ = read_memory 10@ size 4 vp 0
0092: 10@ = float 10@ to_integer
0340: set_text_draw_RGBA 50 180 255 10@
0349: set_text_draw_font 2
0343: set_text_draw_linewidth 640.0
081C: draw_text_outline 1 RGBA 0 0 0 100
033F: set_text_draw_letter_size 0.3 1.0
0348: enable_text_draw_proportional 1
return
:GUI_TextFormat_SmallMenu //3
0340: set_text_draw_RGBA 240 240 240 255
0349: set_text_draw_font 1
0343: set_text_draw_linewidth 640.0
081C: draw_text_outline 1 RGBA 0 0 0 100
033F: set_text_draw_letter_size 0.2 1.0
0348: enable_text_draw_proportional 1
return
:GUI_TextFormat_SmallMenu_Active //4
0AC6: 10@ = label @GUI_Memory_ItemMenuActive_PulseColor offset
0A8D: 10@ = read_memory 10@ size 4 vp 0
0092: 10@ = float 10@ to_integer
0340: set_text_draw_RGBA 50 180 255 10@
0349: set_text_draw_font 1
0343: set_text_draw_linewidth 640.0
081C: draw_text_outline 1 RGBA 0 0 0 100
033F: set_text_draw_letter_size 0.2 1.0
0348: enable_text_draw_proportional 1
return
:GUI_TextFormat_SmallItem //5
0349: set_text_draw_font 1
033F: set_text_draw_letter_size 0.22 1.02
0343: set_text_draw_linewidth 640.0
0340: set_text_draw_RGBA 200 200 200 255
081C: draw_text_outline 1 RGBA 0 0 0 200
return
:GUI_TextFormat_MediumItem //6
0349: set_text_draw_font 1
033F: set_text_draw_letter_size 0.35 1.5
0343: set_text_draw_linewidth 640.0
0340: set_text_draw_RGBA 200 200 200 255
081C: draw_text_outline 1 RGBA 0 0 0 200
return
:GUI_TextFormat_VerySmallItem_Trans //7
0349: set_text_draw_font 1
033F: set_text_draw_letter_size 0.18 0.9
0343: set_text_draw_linewidth 640.0
0340: set_text_draw_RGBA 255 255 255 50
081C: draw_text_outline 0 RGBA 0 0 0 0
return
// --- Functions
:GUI_DrawBoxOutline_VarsBoxToOutline
0087: 20@ = 0@
0087: 21@ = 1@
0087: 22@ = 2@
0087: 23@ = 3@
return
:GUI_ItemMenuActive_PulseColor_Update
//0AB1: call_scm_func @GUI_ItemMenuActive_PulseColor_Update 1 ResetPulse false
const
ItemPulseSpeed = 2.0
end
0AC6: 11@ = label @GUI_Memory_ItemMenuActive_PulseColor offset
0AC6: 12@ = label @GUI_Memory_ItemMenuActive_PulseColor_Step offset
if 0@ == 1
then
0A8C: write_memory 11@ size 4 value 255.0 vp 0
0A8C: write_memory 12@ size 1 value 1 vp 0
else
0A8D: 21@ = read_memory 11@ size 4 vp 0
0A8D: 22@ = read_memory 12@ size 1 vp 0
if 22@ == 1
then //Down
007F: 21@ -= frame_delta_time * ItemPulseSpeed
if 21@ < 180.0
then
21@ = 180.0
22@ = 2
end
else //Up
0079: 21@ += frame_delta_time * ItemPulseSpeed
if 21@ > 255.0
then
21@ = 255.0
22@ = 1
end
end
0A8C: write_memory 11@ size 4 value 21@ vp 0
0A8C: write_memory 12@ size 1 value 22@ vp 0
end
0AB2: ret 0
:StoreActiveItem
0AC6: 1@ = label @GUI_Memory_ActiveItem offset
0A8C: write_memory 1@ size 4 value 0@ vp 0
0AB2: ret 0
// Thread Memory
:GUI_Memory_ActiveItem
hex
00 00 00 00
end
:GUI_Memory_ItemMenuActive_PulseColor
hex
00 00 00 00
end
:GUI_Memory_ItemMenuActive_PulseColor_Step
hex
00
end
Cole isso tudo no fim do seu script. Você possivelmente vai preferir salvar em algum arquivo .txt e usar include, por exemplo:
Dentro do Shine GUI.txt estará o código... É só colocar esta linha no fim do seu script que o código será carregado quando compilar.
Durante o tutorial mostrarei desta maneira, mesmo que não seja necessário fazer.
Atualização: Eu fiz uma nova versão para gta3script, praticamente igual, mas um pouco melhorada. Código no final.
Exemplo de script:
Código: Selecionar tudo
{$cleo}
0000:
while true
wait 0
//Draw Itens
30@ = 100.0 //PosY start
for 31@ = 100 to 119
if 31@ == 100 //first line
then 0AB1: call_scm_func @GUI_DrawBoxOutline_WithText 20 PosX 320.0 PosY 30@ SizeX 100.0 SizeY 15.0 RGBA 0 0 0 180 OutlineSize 1.4 OutlineSides 1 1 0 1 OutlineRGBA 200 200 200 200 TextID 31@ FormatID 5 Padding 5.0
else if 31@ == 119 //last line
then 0AB1: call_scm_func @GUI_DrawBoxOutline_WithText 20 PosX 320.0 PosY 30@ SizeX 100.0 SizeY 15.0 RGBA 0 0 0 180 OutlineSize 1.4 OutlineSides 0 1 1 1 OutlineRGBA 200 200 200 200 TextID 31@ FormatID 5 Padding 5.0
else 0AB1: call_scm_func @GUI_DrawBoxOutline_WithText 20 PosX 320.0 PosY 30@ SizeX 100.0 SizeY 15.0 RGBA 0 0 0 180 OutlineSize 1.4 OutlineSides 0 1 0 1 OutlineRGBA 200 200 200 200 TextID 31@ FormatID 5 Padding 5.0
end
end
30@ += 15.0
end
03F0: enable_text_draw 1
end
{$I cleo\Includes\Shine GUI.txt}
Perceba que eu diferenciei as linhas (primeira, última e do meio). A única mudança foi os "OutlineSides", na qual na primeira linha eu criei uma borda no topo, e na última uma borda embaixo.
Nós também poderíamos fazer tudo sem diferenciar, mas sim criando bordas em todas:
Código: Selecionar tudo
{$cleo}
0000:
while true
wait 0
//Draw Itens
30@ = 100.0 //PosY start
for 31@ = 100 to 119
0AB1: call_scm_func @GUI_DrawBoxOutline_WithText 20 PosX 320.0 PosY 30@ SizeX 100.0 SizeY 15.0 RGBA 0 0 0 180 OutlineSize 1.4 OutlineSides 1 1 1 1 OutlineRGBA 200 200 200 200 TextID 31@ FormatID 5 Padding 5.0
30@ += 15.0
end
03F0: enable_text_draw 1
end
{$I cleo\Includes\Shine GUI.txt}
Bem, vamos entender mais o que fizemos aqui:
Entendendo
PosX e
PosY = Posição a partir do canto superior esquerdo da tela. Ou seja, 0.0 0.0 é o canto superior esquerdo, e 640.0 448.0 é o canto inferior direito.
SizeX e
SizeY = Tamanho. A partir do centro (!!).
RGBA = Cor (e transparência "A") do fundo (da "caixa").
OutlineSize = Largura da borda. Use 1.4 ou 1.6 em média para ficar uma borda de 1px, pois pelo o que vi, usar 1.0 para 1px faz ela ficar meio feia em resoluções como 1280x720 e 1360x768, meio apagadas ou até sumindo. Com testes, vi que 1.4 ou 1.6 ficam melhores.
OutlineSides = Quatro números (1-0) que indicam se adiciona ou não bordas em cada um dos quatro cantos da nossa caixa. Em sentido horário, ou seja, o primeiro número é 12:00, o segundo é 3:00, terceiro 6:00 e quarto 9:00. Lembrando disso é fácil, né.
OutlineRGBA = Cor (e transparência "A") da borda.
TextID = ID do texto no seu arquivo FXT. Você *DEVE* editar a parte da função onde tem o "_MY_%i" na qual "_MY_" é o início do nome da sua entrada GXT, na qual tem que ser um nome único para não causar incompatibilidades. Assim, o texto de ID 100 carregará a entrada GXT "_MY_100", o ID 50 carregará a "_MY_50" etc. É simples, basta escolher o nome no "_MY_" (eu por exemplo usei "_TM_%i" no Tuning Mod) e criar o seu arquivo .FXT com os seus textos lá. (não é necessário underline _ )
FormatID = ID de formatação do seu texto, é o estilo do texto. Olhe no código da função para ver os IDs disponíveis, eu já te dei 7 e facilmente você pode criar outros quando necessário.
Padding = Assim como no CSS, é o padding-left / padding-right. Aqui você usa números positivos para empurrar o texto para a direita e negativos para a esquerda. Podem ser muito úteis. Haverá também um Padding-bottom no ID de formatação, pois dependente do tamanho da letra ela acaba ficando muito pra baixo e precisa de uma correção manual.
Você não quer fundo?
Você não quer borda?
Você não quer texto?
É SÓ CONFIGURAR PARA "-1"!!! Ou seja, você pode usar esta função para criar simples quadrados ou textos. Devido a ela ter menos "tudo mastigado" e ser mais manual, a nossa função tem sim um bom desempenho mesmo ela sendo meio grande no script.
Criando um menu interativo
Agora vamos um pouco além: Criar um completo sistema de menu
Código: Selecionar tudo
{$cleo}
0000:
const
ActiveItem = 0@
StartItem = 100
EndItem = 119
end
ActiveItem = StartItem
while true
//cmds
if 0AB0: key_pressed 38 // Up
then
0@--
0AB1: call_scm_func @GUI_ItemMenuActive_PulseColor_Update 1 ResetPulse true
end
if 0AB0: key_pressed 40 // Down
then
0@++
0AB1: call_scm_func @GUI_ItemMenuActive_PulseColor_Update 1 ResetPulse true
end
if 0@ < StartItem
then 0@ = StartItem
end
if 0@ > EndItem
then 0@ = EndItem
end
if 0AB0: key_pressed 89 //Y
then
0AD1: show_formatted_text_highpriority "~s~Item ~y~%d~s~ foi selecionado!" time 2000 ActiveItem
end
if 0AB0: key_pressed 78 //N
then
03F0: enable_text_draw 1
break
end
0AB1: call_scm_func @StoreActiveItem 1 0@
gosub @ProcessGame_and_DrawItens
//wait for key release
32@ = 0
while true
if or
0AB0: key_pressed 38 // Up
0AB0: key_pressed 40 // Down
jf break
if 32@ < 50
jf break
gosub @ProcessGame_and_DrawItens
end
end
0ACD: show_text_highpriority "Saiu..." time 1000
0A93: end_custom_thread
:ProcessGame_and_DrawItens
wait 0
30@ = 100.0 //PosY start
for 31@ = StartItem to EndtItem
if 31@ == StartItem //first line
then 0AB1: call_scm_func @GUI_DrawBoxOutline_WithText 20 PosX 320.0 PosY 30@ SizeX 100.0 SizeY 15.0 RGBA 0 0 0 180 OutlineSize 1.4 OutlineSides 1 1 0 1 OutlineRGBA 200 200 200 200 TextID 31@ FormatID 3 Padding 5.0
else if 31@ == EndtItem //last line
then 0AB1: call_scm_func @GUI_DrawBoxOutline_WithText 20 PosX 320.0 PosY 30@ SizeX 100.0 SizeY 15.0 RGBA 0 0 0 180 OutlineSize 1.4 OutlineSides 0 1 1 1 OutlineRGBA 200 200 200 200 TextID 31@ FormatID 3 Padding 5.0
else 0AB1: call_scm_func @GUI_DrawBoxOutline_WithText 20 PosX 320.0 PosY 30@ SizeX 100.0 SizeY 15.0 RGBA 0 0 0 180 OutlineSize 1.4 OutlineSides 0 1 0 1 OutlineRGBA 200 200 200 200 TextID 31@ FormatID 3 Padding 5.0
end
end
30@ += 15.0
end
0AB1: call_scm_func @GUI_ItemMenuActive_PulseColor_Update 1 ResetPulse false
03F0: enable_text_draw 1
return
{$I cleo\Includes\Shine GUI.txt}
Muito mais divertido do que usar os desgastados "panel" do GTA SA.
E ainda muito bonito, pois o item selecionado fica pulsando!
Veja que eu comecei fazendo simples comandos de diminuir e aumentar uma variável, na qual é o item selecionado, e a cada mudança eu chamei a SCM Func "GUI_ItemMenuActive_PulseColor_Update" com ResetPulse para resetar o pulse, assim a cada mudança de item a cor do pulse volta ao máximo, um detalhe pequeno mas que ajuda na visualização.
Perceba que usei a mesma função sem o ResetPulse ali na label onde processa o jogo e a interface, pois ela fará a atualização do meu pulse, ou seja, fará o pulse funcionar fazendo a letra piscando suavemente sem parar. Tudo o que você tem que fazer é deixar aquela scm func ali em um loop para fazer tudo funcionar.
Em seguida dos comandos, eu chamei a função StoreActiveItem enviando a minha variável com o item selecionado. Ela irá salvar o meu item como ativado para criar o pulse nele. Tudo automático.
Não são todas as formatações que mostrei que têm o pulse, somente as formatações de ID 1 e 3. Basta ver no código da nossa função embaixo da linha "// Text formats IDs" como funciona. Ele basicamente muda a formatação 1 para 2, e 3 para 4 caso o seu atual item esteja ativo, e nas formatações 2 e 4 há o pulse lá, enquanto na 1 e 3 não tem. Basta ler o código para entender.
Coloquei uma label separada para mostrar a interface e processar o jogo (wait 0) (e nunca podendo faltar do 03F0: né). Eu sempre faço assim pois evita a interface piscar ou sumir caso eu precise realizar alguma espera, assim ao invés do wait 0 eu chamo esta label na qual tem o wait 0 além de toda a interface para ser mostrada.
E como acabei de explicar, no fim eu coloco um while para o jogo parar enquanto você está segurando a tecla de para cima ou para baixo, com um limite de 50 ms. Assim ao mudar um item, o jogo espera você soltar da tecla para continuar processando e assim mudar o item de novo. Mas se você demorar 50 ms para soltar a tecla, ele ainda continuará rodando e mudará o item de novo.
Entendeu a lógica da coisa? Você cria cada item do menu num quadrado que tem bordas, mas você também pode livremente criar um quadrado inteiro como fundo e criar os itens lá dentro, fica melhor para o jogo processar, mas você não terá a liberdade de adicionar e remover itens dinamicamente mudando automaticamente a altura do fundo, no caso de criar um quadrado único atrás, será necessário configurar a altura dele conforme você adicione mais ou menos itens.
Para gta3script
Nova versão, repensado e melhorada, para gta3script:
Exemplo completo:
Código: Selecionar tudo
// You need CLEO+: https://forum.mixmods.com.br/f141-gta3script-cleo/t5206-como-criar-scripts-com-cleo
// Change all "_MY_" GXT to your unique name
// You may want to change formating too
SCRIPT_START
{
LVAR_INT i item selectedItem totalItems direction scplayer
LVAR_FLOAT posY
GET_PLAYER_CHAR 0 scplayer
ADD_TEXT_LABEL _MY_1 "Item 1"
ADD_TEXT_LABEL _MY_2 "Item 2"
ADD_TEXT_LABEL _MY_3 "Item 3"
ADD_TEXT_LABEL _MY_4 "Item 4"
ADD_TEXT_LABEL _MY_5 "Item 5"
CLEO_CALL GUI_Pulse_Reset 0
selectedItem = 1
totalItems = 5
WHILE TRUE
WAIT 0
// Draw menu
posY = 240.0
item = 1
WHILE item <= totalItems
CLEO_CALL GUI_DrawBoxOutline_WithText 0 /*pos*/(320.0 posY) /*siz*/(150.0 15.0) /*color*/(0 0 0 180) /*ouline*/(1.4 1 1 1 1 200 200 200 200) /*gxtId*/ item /*formatId*/ 1 /*left pad*/ 5.0 /*top pad*/ 1.0
posY += 15.0
item++
ENDWHILE
// Update selected item
IF GOSUB UpJustPressed
selectedItem--
CLEO_CALL GUI_Pulse_Reset 0
IF selectedItem < 1
selectedItem = totalItems
ENDIF
ENDIF
IF GOSUB DownJustPressed
selectedItem++
CLEO_CALL GUI_Pulse_Reset 0
IF selectedItem > totalItems
selectedItem = 1
ENDIF
ENDIF
IF GOSUB SelectJustPressed
PRINT_FORMATTED_NOW "Item selected: %i" 1000 selectedItem
ENDIF
// Finalize update
CLEO_CALL GUI_SetAtiveGXT 0 (selectedItem)()
CLEO_CALL GUI_Pulse_Update 0 (0)()
USE_TEXT_COMMANDS 0
ENDWHILE
UpJustPressed:
IF IS_PC_USING_JOYPAD
IF IS_BUTTON_JUST_PRESSED PAD1 DPADUP
RETURN_TRUE
RETURN
ENDIF
ELSE
IF IS_KEY_JUST_PRESSED VK_UP
RETURN_TRUE
RETURN
ENDIF
ENDIF
RETURN_FALSE
RETURN
DownJustPressed:
IF IS_PC_USING_JOYPAD
IF IS_BUTTON_JUST_PRESSED PAD1 DPADDOWN
RETURN_TRUE
RETURN
ENDIF
ELSE
IF IS_KEY_JUST_PRESSED VK_DOWN
RETURN_TRUE
RETURN
ENDIF
ENDIF
RETURN_FALSE
RETURN
SelectJustPressed:
IF IS_PC_USING_JOYPAD
IF IS_BUTTON_PRESSED PAD1 CROSS
RETURN_TRUE
RETURN
ENDIF
ELSE
IF IS_CHAR_SITTING_IN_ANY_CAR scplayer
IF IS_AIM_BUTTON_PRESSED PAD1 // this is handbrake in car
RETURN_TRUE
RETURN
ENDIF
ELSE
IF IS_BUTTON_PRESSED PAD1 CROSS
RETURN_TRUE
RETURN
ENDIF
ENDIF
ENDIF
RETURN_FALSE
RETURN
}
SCRIPT_END
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////// Shine GUI by Junior_Djjr //////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
{
// In
LVAR_FLOAT posX posY sizeX sizeY
LVAR_INT r g b a
LVAR_FLOAT outlineSize
LVAR_INT outlineTop outlineRight outlineBottom outlineLeft outlineR outlineG outlineB outlineA textId formatId
LVAR_FLOAT paddingLeft paddingTop
LVAR_INT i
LVAR_FLOAT f h
LVAR_TEXT_LABEL gxt
//CLEO_CALL GUI_DrawBoxOutline_WithText 0 /*pos*/(320.0 240.0) /*siz*/(200.0 200.0) /*color*/(0 0 0 180) /*ouline*/(1.4 1 1 1 1 200 200 200 200) /*gxtId*/ -1 /*formatId*/ 1 /*left padding*/ 3.0 /*top padding*/ 1.0
GUI_DrawBoxOutline_WithText:
// - Create Box
IF a > 0 // Box
SET_TEXT_DRAW_BEFORE_FADE TRUE
DRAW_RECT posX posY sizeX sizeY (r g b a)
ENDIF
// - Create Outlines
IF outlineLeft = TRUE //outline side left
f = sizeX / 2.0
h = posX - f
SET_TEXT_DRAW_BEFORE_FADE TRUE
DRAW_RECT h posY outlineSize sizeY (outlineR outlineG outlineB outlineA)
ENDIF
IF outlineTop = TRUE //outline side top
f = sizeY / 2.0
h = posY - f
SET_TEXT_DRAW_BEFORE_FADE TRUE
DRAW_RECT posX h sizeX outlineSize (outlineR outlineG outlineB outlineA)
ENDIF
IF outlineRight = TRUE //outline side right
f = sizeX / 2.0
h = posX + f
SET_TEXT_DRAW_BEFORE_FADE TRUE
DRAW_RECT h posY outlineSize sizeY (outlineR outlineG outlineB outlineA)
ENDIF
IF outlineBottom = TRUE //outline side bottom
f = sizeY / 2.0
h = posY + f
SET_TEXT_DRAW_BEFORE_FADE TRUE
DRAW_RECT posX h sizeX outlineSize (outlineR outlineG outlineB outlineA)
ENDIF
// - Create Text
IF textId >= 0 // Text
STRING_FORMAT gxt "_MY_%i" textId // CHANGE THIS, this need to be unique to avoid conflict with other mods!
// Do Padding
f = sizeX / 2.0
IF paddingLeft > 0.0 // Padding Left/Right
posX -= f
ELSE // to left
posX += f
ENDIF
posX += paddingLeft
GET_LABEL_POINTER GUI_Memory_ActiveItem i
READ_MEMORY i 4 FALSE (i)
IF i = textId
// Text formats IDs adapted to ACTIVE state
IF formatId = 1 //Menu Item
formatId = 2 //Menu Item ACTIVE
ENDIF
IF formatId = 3 //Small Menu
formatId = 4 //Small Menu ACTIVE
ENDIF
ENDIF
CLEO_CALL GUI_SetTextFormatByID 0 (formatId)(h)
posY -= h
posY += paddingTop
DISPLAY_TEXT posX posY $gxt
ENDIF
CLEO_RETURN 0
}
// --- Format IDs
{
LVAR_INT formatId //In
LVAR_INT i
LVAR_FLOAT g
GUI_SetTextFormatByID:
SWITCH formatId
CASE 1
GOSUB GUI_TextFormat_ItemMenu
CLEO_RETURN 0 6.0
BREAK
CASE 2
GOSUB GUI_TextFormat_ItemMenu_Active
CLEO_RETURN 0 6.0
BREAK
CASE 3
GOSUB GUI_TextFormat_SmallMenu
CLEO_RETURN 0 5.0
BREAK
CASE 4
GOSUB GUI_TextFormat_SmallMenu_Active
CLEO_RETURN 0 5.0
BREAK
CASE 5
GOSUB GUI_TextFormat_SmallItem
CLEO_RETURN 0 5.0
BREAK
CASE 6
GOSUB GUI_TextFormat_MediumItem
CLEO_RETURN 0 5.0
BREAK
CASE 7
GOSUB GUI_TextFormat_VerySmallItem_Trans
CLEO_RETURN 0 1.0
BREAK
ENDSWITCH
GUI_TextFormat_ItemMenu: //1
SET_TEXT_COLOUR 240 240 240 255
SET_TEXT_FONT 2
SET_TEXT_WRAPX 640.0
SET_TEXT_EDGE 1 0 0 0 100
SET_TEXT_SCALE 0.3 1.0
SET_TEXT_PROPORTIONAL 1
SET_TEXT_DRAW_BEFORE_FADE FALSE
RETURN
GUI_TextFormat_ItemMenu_Active: //2
CLEO_CALL GUI_GetPulseAlpha 0 (i)
SET_TEXT_COLOUR 50 180 255 i
SET_TEXT_FONT 2
SET_TEXT_WRAPX 640.0
SET_TEXT_EDGE 1 0 0 0 100
SET_TEXT_SCALE 0.3 1.0
SET_TEXT_PROPORTIONAL 1
SET_TEXT_DRAW_BEFORE_FADE FALSE
RETURN
GUI_TextFormat_SmallMenu: //3
SET_TEXT_COLOUR 240 240 240 255
SET_TEXT_FONT 1
SET_TEXT_WRAPX 640.0
SET_TEXT_EDGE 1 0 0 0 100
SET_TEXT_SCALE 0.2 1.0
SET_TEXT_PROPORTIONAL 1
SET_TEXT_DRAW_BEFORE_FADE FALSE
RETURN
GUI_TextFormat_SmallMenu_Active: //4
CLEO_CALL GUI_GetPulseAlpha 0 (i)
SET_TEXT_COLOUR 50 180 255 i
SET_TEXT_FONT 1
SET_TEXT_WRAPX 640.0
SET_TEXT_EDGE 1 0 0 0 100
SET_TEXT_SCALE 0.2 1.0
SET_TEXT_PROPORTIONAL 1
SET_TEXT_DRAW_BEFORE_FADE FALSE
RETURN
GUI_TextFormat_SmallItem: //5
SET_TEXT_FONT 1
SET_TEXT_SCALE 0.22 1.02
SET_TEXT_WRAPX 640.0
SET_TEXT_COLOUR 200 200 200 255
SET_TEXT_EDGE 1 0 0 0 200
SET_TEXT_PROPORTIONAL 1
SET_TEXT_DRAW_BEFORE_FADE FALSE
RETURN
GUI_TextFormat_MediumItem: //6
SET_TEXT_FONT 1
SET_TEXT_SCALE 0.35 1.5
SET_TEXT_WRAPX 640.0
SET_TEXT_COLOUR 200 200 200 255
SET_TEXT_EDGE 1 0 0 0 200
SET_TEXT_PROPORTIONAL 1
SET_TEXT_DRAW_BEFORE_FADE FALSE
RETURN
GUI_TextFormat_VerySmallItem_Trans: //7
SET_TEXT_FONT 1
SET_TEXT_SCALE 0.18 0.9
SET_TEXT_WRAPX 640.0
SET_TEXT_COLOUR 255 255 255 50
SET_TEXT_EDGE 0 0 0 0 0
SET_TEXT_PROPORTIONAL 1
SET_TEXT_DRAW_BEFORE_FADE FALSE
RETURN
}
// --- Functions
{
LVAR_INT i
LVAR_FLOAT g
GUI_GetPulseAlpha:
GET_LABEL_POINTER GUI_Memory_ItemMenuActive_PulseAlpha i
READ_MEMORY i 4 FALSE (g)
i =# g
CLEO_RETURN 0 i
}
{
LVAR_INT item //In
LVAR_INT i
GUI_SetAtiveGXT:
GET_LABEL_POINTER GUI_Memory_ActiveItem i
WRITE_MEMORY i 4 item FALSE
CLEO_RETURN 0
}
{
LVAR_INT pAlpha pStep iStep
LVAR_FLOAT fAlpha
CONST_FLOAT ItemPulseSpeed 2.0
GUI_Pulse_Update:
GET_LABEL_POINTER GUI_Memory_ItemMenuActive_PulseAlpha pAlpha
GET_LABEL_POINTER GUI_Memory_ItemMenuActive_PulseAlpha_Step pStep
READ_MEMORY pAlpha 4 FALSE (fAlpha)
READ_MEMORY pStep 1 FALSE (iStep)
IF iStep = 1
fAlpha -=@ ItemPulseSpeed
IF fAlpha < 180.0
fAlpha = 180.0
iStep = 2
ENDIF
ELSE //Up
fAlpha +=@ ItemPulseSpeed
IF fAlpha > 255.0
fAlpha = 255.0
iStep = 1
ENDIF
ENDIF
WRITE_MEMORY pAlpha 4 fAlpha FALSE
WRITE_MEMORY pStep 1 iStep FALSE
CLEO_RETURN 0
}
{
LVAR_INT pAlpha pStep iStep
LVAR_FLOAT fAlpha
GUI_Pulse_Reset:
GET_LABEL_POINTER GUI_Memory_ItemMenuActive_PulseAlpha pAlpha
GET_LABEL_POINTER GUI_Memory_ItemMenuActive_PulseAlpha_Step pStep
WRITE_MEMORY pAlpha 4 255.0 FALSE
WRITE_MEMORY pStep 1 1 FALSE
CLEO_RETURN 0
}
{
LVAR_INT item // Item
LVAR_INT i
StoreActiveItem:
GET_LABEL_POINTER GUI_Memory_ActiveItem i
WRITE_MEMORY i 4 item FALSE
CLEO_RETURN 0
}
// Thread Memory
GUI_Memory_ActiveItem:
DUMP
00 00 00 00
ENDDUMP
GUI_Memory_ItemMenuActive_PulseAlpha:
DUMP
00 00 00 00
ENDDUMP
GUI_Memory_ItemMenuActive_PulseAlpha_Step:
DUMP
00
ENDDUMP
Diferente da original, esta é inclusive adapta para gamepad, e usa umas funções mais amigáveis de entender.
Uso no Tuning Mod v2
No Tuning Mod eu também fiz para que quando enviar uma cor com -2 faça com que carregue uma cor guardada numa label, na qual eu guardei aquela cor logo ao entrar no mod e pegar o tipo de veículo que você está usando, assim cada veículo ficou com detalhes na interface numa cor diferente, o que achei interessante.
Só um exemplo para ter noção:
Esta interface é desenhada com isso:
Código: Selecionar tudo
:GUI_InstallInterface_DrawItens
// Background
0AB1: call_scm_func @GUI_DrawBoxOutline_WithText 20 PosX INSTALL_X_MAIN PosY 130.0 SizeX INSTALL_SX_MAIN SizeY 270.0 RGBA 0 0 0 150 OutlineSize 1.6 OutlineSides 0 1 1 1 OutlineRGBA 200 200 200 200 TextID -1 FormatID -1 Padding -1
// Top detail
0AB1: call_scm_func @GUI_DrawBoxOutline_WithText 20 PosX INSTALL_X_MAIN PosY -2.5 SizeX INSTALL_SX_MAIN SizeY 10.0 RGBA 0 0 0 25 OutlineSize 1.6 OutlineSides 0 0 0 0 OutlineRGBA 200 200 200 200 TextID -1 FormatID -1 Padding -1
0AB1: call_scm_func @GUI_DrawBoxOutline_WithText 20 PosX INSTALL_X_MAIN PosY 0.0 SizeX INSTALL_SX_MAIN SizeY 10.0 RGBA 0 0 0 25 OutlineSize 1.6 OutlineSides 0 0 0 0 OutlineRGBA 200 200 200 200 TextID -1 FormatID -1 Padding -1
0AB1: call_scm_func @GUI_DrawBoxOutline_WithText 20 PosX INSTALL_X_MAIN PosY 2.5 SizeX INSTALL_SX_MAIN SizeY 10.0 RGBA 0 0 0 25 OutlineSize 1.6 OutlineSides 0 0 0 0 OutlineRGBA 200 200 200 200 TextID -1 FormatID -1 Padding -1
0AB1: call_scm_func @GUI_DrawBoxOutline_WithText 20 PosX INSTALL_X_MAIN PosY 5.0 SizeX INSTALL_SX_MAIN SizeY 10.0 RGBA 0 0 0 25 OutlineSize 1.6 OutlineSides 0 0 0 0 OutlineRGBA 200 200 200 200 TextID -1 FormatID -1 Padding -1
// Arrows
0AC6: TempVar1 = label @Text_ArrowsMode offset
0A8D: TempVar1 = read_memory TempVar1 size 4 vp 0
if TempVar1 == 0 //Position
then
0AB1: call_scm_func @GUI_DrawBoxOutline_WithText 20 PosX INSTALL_X_MAIN PosY INSTALL_Y_UP SizeX INSTALL_SX_MAIN SizeY INSTALL_SY_BIG RGBA 0 0 0 ColorAlphaNo OutlineSize 1.6 OutlineSides 0 0 0 0 OutlineRGBA 200 200 200 200 TextID 301 FormatID 5 Padding 3.0
0AB1: call_scm_func @GUI_DrawBoxOutline_WithText 20 PosX INSTALL_X_MAIN PosY INSTALL_Y_DOWN SizeX INSTALL_SX_MAIN SizeY INSTALL_SY_BIG RGBA 0 0 0 ColorAlphaNo OutlineSize 1.6 OutlineSides 0 0 0 0 OutlineRGBA 200 200 200 200 TextID 302 FormatID 5 Padding 3.0
0AB1: call_scm_func @GUI_DrawBoxOutline_WithText 20 PosX INSTALL_X_MAIN PosY INSTALL_Y_LEFT SizeX INSTALL_SX_MAIN SizeY INSTALL_SY_BIG RGBA 0 0 0 ColorAlphaNo OutlineSize 1.6 OutlineSides 0 0 0 0 OutlineRGBA 200 200 200 200 TextID 303 FormatID 5 Padding 3.0
0AB1: call_scm_func @GUI_DrawBoxOutline_WithText 20 PosX INSTALL_X_MAIN PosY INSTALL_Y_RIGHT SizeX INSTALL_SX_MAIN SizeY INSTALL_SY_BIG RGBA 0 0 0 ColorAlphaNo OutlineSize 1.6 OutlineSides 0 0 0 0 OutlineRGBA 200 200 200 200 TextID 304 FormatID 5 Padding 3.0
0AB1: call_scm_func @GUI_DrawBoxOutline_WithText 20 PosX INSTALL_X_MAIN PosY INSTALL_Y_PAGEUP SizeX INSTALL_SX_MAIN SizeY INSTALL_SY_BIG RGBA 0 0 0 ColorAlphaNo OutlineSize 1.6 OutlineSides 0 0 0 0 OutlineRGBA 200 200 200 200 TextID 305 FormatID 6 Padding 3.0
0AB1: call_scm_func @GUI_DrawBoxOutline_WithText 20 PosX INSTALL_X_MAIN PosY INSTALL_Y_PAGEDOWN SizeX INSTALL_SX_MAIN SizeY INSTALL_SY_BIG RGBA 0 0 0 ColorAlphaNo OutlineSize 1.6 OutlineSides 0 0 0 0 OutlineRGBA 200 200 200 200 TextID 306 FormatID 6 Padding 3.0
end
if TempVar1 == 1 //Rotation
then
0AB1: call_scm_func @GUI_DrawBoxOutline_WithText 20 PosX INSTALL_X_MAIN PosY INSTALL_Y_UP SizeX INSTALL_SX_MAIN SizeY INSTALL_SY_BIG RGBA 0 0 0 ColorAlphaNo OutlineSize 1.6 OutlineSides 0 0 0 0 OutlineRGBA 200 200 200 200 TextID 323 FormatID 5 Padding 3.0
0AB1: call_scm_func @GUI_DrawBoxOutline_WithText 20 PosX INSTALL_X_MAIN PosY INSTALL_Y_DOWN SizeX INSTALL_SX_MAIN SizeY INSTALL_SY_BIG RGBA 0 0 0 ColorAlphaNo OutlineSize 1.6 OutlineSides 0 0 0 0 OutlineRGBA 200 200 200 200 TextID 324 FormatID 5 Padding 3.0
0AB1: call_scm_func @GUI_DrawBoxOutline_WithText 20 PosX INSTALL_X_MAIN PosY INSTALL_Y_LEFT SizeX INSTALL_SX_MAIN SizeY INSTALL_SY_BIG RGBA 0 0 0 ColorAlphaNo OutlineSize 1.6 OutlineSides 0 0 0 0 OutlineRGBA 200 200 200 200 TextID 325 FormatID 5 Padding 3.0
0AB1: call_scm_func @GUI_DrawBoxOutline_WithText 20 PosX INSTALL_X_MAIN PosY INSTALL_Y_RIGHT SizeX INSTALL_SX_MAIN SizeY INSTALL_SY_BIG RGBA 0 0 0 ColorAlphaNo OutlineSize 1.6 OutlineSides 0 0 0 0 OutlineRGBA 200 200 200 200 TextID 326 FormatID 5 Padding 3.0
0AB1: call_scm_func @GUI_DrawBoxOutline_WithText 20 PosX INSTALL_X_MAIN PosY INSTALL_Y_PAGEUP SizeX INSTALL_SX_MAIN SizeY INSTALL_SY_BIG RGBA 0 0 0 ColorAlphaNo OutlineSize 1.6 OutlineSides 0 0 0 0 OutlineRGBA 200 200 200 200 TextID 327 FormatID 6 Padding 3.0
0AB1: call_scm_func @GUI_DrawBoxOutline_WithText 20 PosX INSTALL_X_MAIN PosY INSTALL_Y_PAGEDOWN SizeX INSTALL_SX_MAIN SizeY INSTALL_SY_BIG RGBA 0 0 0 ColorAlphaNo OutlineSize 1.6 OutlineSides 0 0 0 0 OutlineRGBA 200 200 200 200 TextID 328 FormatID 6 Padding 3.0
end
if TempVar1 == 2 //Deform
then
0AB1: call_scm_func @GUI_DrawBoxOutline_WithText 20 PosX INSTALL_X_MAIN PosY INSTALL_Y_UP_D SizeX INSTALL_SX_MAIN SizeY INSTALL_SY_MEDIUM RGBA 0 0 0 ColorAlphaNo OutlineSize 1.6 OutlineSides 0 0 0 0 OutlineRGBA 200 200 200 200 TextID 329 FormatID 5 Padding 3.0
0AB1: call_scm_func @GUI_DrawBoxOutline_WithText 20 PosX INSTALL_X_MAIN PosY INSTALL_Y_DOWN_D SizeX INSTALL_SX_MAIN SizeY INSTALL_SY_MEDIUM RGBA 0 0 0 ColorAlphaNo OutlineSize 1.6 OutlineSides 0 0 0 0 OutlineRGBA 200 200 200 200 TextID 330 FormatID 5 Padding 3.0
0AB1: call_scm_func @GUI_DrawBoxOutline_WithText 20 PosX INSTALL_X_MAIN PosY INSTALL_Y_LEFT_D SizeX INSTALL_SX_MAIN SizeY INSTALL_SY_MEDIUM RGBA 0 0 0 ColorAlphaNo OutlineSize 1.6 OutlineSides 0 0 0 0 OutlineRGBA 200 200 200 200 TextID 331 FormatID 5 Padding 3.0
0AB1: call_scm_func @GUI_DrawBoxOutline_WithText 20 PosX INSTALL_X_MAIN PosY INSTALL_Y_RIGHT_D SizeX INSTALL_SX_MAIN SizeY INSTALL_SY_MEDIUM RGBA 0 0 0 ColorAlphaNo OutlineSize 1.6 OutlineSides 0 0 0 0 OutlineRGBA 200 200 200 200 TextID 332 FormatID 5 Padding 3.0
0AB1: call_scm_func @GUI_DrawBoxOutline_WithText 20 PosX INSTALL_X_MAIN PosY INSTALL_Y_PAGEUP_D SizeX INSTALL_SX_MAIN SizeY INSTALL_SY_MEDIUM RGBA 0 0 0 ColorAlphaNo OutlineSize 1.6 OutlineSides 0 0 0 0 OutlineRGBA 200 200 200 200 TextID 333 FormatID 6 Padding 3.0
0AB1: call_scm_func @GUI_DrawBoxOutline_WithText 20 PosX INSTALL_X_MAIN PosY INSTALL_Y_PAGEDOWN_D SizeX INSTALL_SX_MAIN SizeY INSTALL_SY_MEDIUM RGBA 0 0 0 ColorAlphaNo OutlineSize 1.6 OutlineSides 0 0 0 0 OutlineRGBA 200 200 200 200 TextID 334 FormatID 6 Padding 3.0
0AB1: call_scm_func @GUI_DrawBoxOutline_WithText 20 PosX INSTALL_X_MAIN PosY INSTALL_Y_HOME_D SizeX INSTALL_SX_MAIN SizeY INSTALL_SY_MEDIUM RGBA 0 0 0 ColorAlphaNo OutlineSize 1.6 OutlineSides 0 0 0 0 OutlineRGBA 200 200 200 200 TextID 335 FormatID 6 Padding 3.0
0AB1: call_scm_func @GUI_DrawBoxOutline_WithText 20 PosX INSTALL_X_MAIN PosY INSTALL_Y_END_D SizeX INSTALL_SX_MAIN SizeY INSTALL_SY_MEDIUM RGBA 0 0 0 ColorAlphaNo OutlineSize 1.6 OutlineSides 0 0 0 0 OutlineRGBA 200 200 200 200 TextID 336 FormatID 6 Padding 3.0
end
if TempVar1 == 3 //Stretch
then
0AB1: call_scm_func @GUI_DrawBoxOutline_WithText 20 PosX INSTALL_X_MAIN PosY INSTALL_Y_UP SizeX INSTALL_SX_MAIN SizeY INSTALL_SY_BIG RGBA 0 0 0 ColorAlphaNo OutlineSize 1.6 OutlineSides 0 0 0 0 OutlineRGBA 200 200 200 200 TextID 345 FormatID 5 Padding 3.0
0AB1: call_scm_func @GUI_DrawBoxOutline_WithText 20 PosX INSTALL_X_MAIN PosY INSTALL_Y_DOWN SizeX INSTALL_SX_MAIN SizeY INSTALL_SY_BIG RGBA 0 0 0 ColorAlphaNo OutlineSize 1.6 OutlineSides 0 0 0 0 OutlineRGBA 200 200 200 200 TextID 346 FormatID 5 Padding 3.0
0AB1: call_scm_func @GUI_DrawBoxOutline_WithText 20 PosX INSTALL_X_MAIN PosY INSTALL_Y_LEFT SizeX INSTALL_SX_MAIN SizeY INSTALL_SY_BIG RGBA 0 0 0 ColorAlphaNo OutlineSize 1.6 OutlineSides 0 0 0 0 OutlineRGBA 200 200 200 200 TextID 347 FormatID 5 Padding 3.0
0AB1: call_scm_func @GUI_DrawBoxOutline_WithText 20 PosX INSTALL_X_MAIN PosY INSTALL_Y_RIGHT SizeX INSTALL_SX_MAIN SizeY INSTALL_SY_BIG RGBA 0 0 0 ColorAlphaNo OutlineSize 1.6 OutlineSides 0 0 0 0 OutlineRGBA 200 200 200 200 TextID 348 FormatID 5 Padding 3.0
0AB1: call_scm_func @GUI_DrawBoxOutline_WithText 20 PosX INSTALL_X_MAIN PosY INSTALL_Y_PAGEUP SizeX INSTALL_SX_MAIN SizeY INSTALL_SY_BIG RGBA 0 0 0 ColorAlphaNo OutlineSize 1.6 OutlineSides 0 0 0 0 OutlineRGBA 200 200 200 200 TextID 349 FormatID 6 Padding 3.0
0AB1: call_scm_func @GUI_DrawBoxOutline_WithText 20 PosX INSTALL_X_MAIN PosY INSTALL_Y_PAGEDOWN SizeX INSTALL_SX_MAIN SizeY INSTALL_SY_BIG RGBA 0 0 0 ColorAlphaNo OutlineSize 1.6 OutlineSides 0 0 0 0 OutlineRGBA 200 200 200 200 TextID 350 FormatID 6 Padding 3.0
end
if TempVar1 == 4 //Size All
then
0AB1: call_scm_func @GUI_DrawBoxOutline_WithText 20 PosX INSTALL_X_MAIN PosY INSTALL_Y_UP SizeX INSTALL_SX_MAIN SizeY INSTALL_SY_BIG RGBA 0 0 0 ColorAlphaNo OutlineSize 1.6 OutlineSides 0 0 0 0 OutlineRGBA 200 200 200 200 TextID 351 FormatID 5 Padding 3.0
0AB1: call_scm_func @GUI_DrawBoxOutline_WithText 20 PosX INSTALL_X_MAIN PosY INSTALL_Y_DOWN SizeX INSTALL_SX_MAIN SizeY INSTALL_SY_BIG RGBA 0 0 0 ColorAlphaNo OutlineSize 1.6 OutlineSides 0 0 0 0 OutlineRGBA 200 200 200 200 TextID 352 FormatID 5 Padding 3.0
end
if TempVar1 == 5 //Invert Pos
then
0AB1: call_scm_func @GUI_DrawBoxOutline_WithText 20 PosX INSTALL_X_MAIN PosY INSTALL_Y_UP SizeX INSTALL_SX_MAIN SizeY INSTALL_SY_BIG RGBA 0 0 0 ColorAlphaNo OutlineSize 1.6 OutlineSides 0 0 0 0 OutlineRGBA 200 200 200 200 TextID 353 FormatID 5 Padding 3.0
0AB1: call_scm_func @GUI_DrawBoxOutline_WithText 20 PosX INSTALL_X_MAIN PosY INSTALL_Y_RIGHT SizeX INSTALL_SX_MAIN SizeY INSTALL_SY_BIG RGBA 0 0 0 ColorAlphaNo OutlineSize 1.6 OutlineSides 0 0 0 0 OutlineRGBA 200 200 200 200 TextID 354 FormatID 5 Padding 3.0
0AB1: call_scm_func @GUI_DrawBoxOutline_WithText 20 PosX INSTALL_X_MAIN PosY INSTALL_Y_PAGEDOWN SizeX INSTALL_SX_MAIN SizeY INSTALL_SY_BIG RGBA 0 0 0 ColorAlphaNo OutlineSize 1.6 OutlineSides 0 0 0 0 OutlineRGBA 200 200 200 200 TextID 355 FormatID 6 Padding 3.0
end
if TempVar1 == 6 //Invert Size
then
0AB1: call_scm_func @GUI_DrawBoxOutline_WithText 20 PosX INSTALL_X_MAIN PosY INSTALL_Y_UP SizeX INSTALL_SX_MAIN SizeY INSTALL_SY_BIG RGBA 0 0 0 ColorAlphaNo OutlineSize 1.6 OutlineSides 0 0 0 0 OutlineRGBA 200 200 200 200 TextID 356 FormatID 5 Padding 3.0
0AB1: call_scm_func @GUI_DrawBoxOutline_WithText 20 PosX INSTALL_X_MAIN PosY INSTALL_Y_RIGHT SizeX INSTALL_SX_MAIN SizeY INSTALL_SY_BIG RGBA 0 0 0 ColorAlphaNo OutlineSize 1.6 OutlineSides 0 0 0 0 OutlineRGBA 200 200 200 200 TextID 357 FormatID 5 Padding 3.0
0AB1: call_scm_func @GUI_DrawBoxOutline_WithText 20 PosX INSTALL_X_MAIN PosY INSTALL_Y_PAGEDOWN SizeX INSTALL_SX_MAIN SizeY INSTALL_SY_BIG RGBA 0 0 0 ColorAlphaNo OutlineSize 1.6 OutlineSides 0 0 0 0 OutlineRGBA 200 200 200 200 TextID 358 FormatID 6 Padding 3.0
end
if TempVar1 == 7 //Invert Rot
then
0AB1: call_scm_func @GUI_DrawBoxOutline_WithText 20 PosX INSTALL_X_MAIN PosY INSTALL_Y_UP SizeX INSTALL_SX_MAIN SizeY INSTALL_SY_BIG RGBA 0 0 0 ColorAlphaNo OutlineSize 1.6 OutlineSides 0 0 0 0 OutlineRGBA 200 200 200 200 TextID 359 FormatID 5 Padding 3.0
0AB1: call_scm_func @GUI_DrawBoxOutline_WithText 20 PosX INSTALL_X_MAIN PosY INSTALL_Y_RIGHT SizeX INSTALL_SX_MAIN SizeY INSTALL_SY_BIG RGBA 0 0 0 ColorAlphaNo OutlineSize 1.6 OutlineSides 0 0 0 0 OutlineRGBA 200 200 200 200 TextID 360 FormatID 5 Padding 3.0
0AB1: call_scm_func @GUI_DrawBoxOutline_WithText 20 PosX INSTALL_X_MAIN PosY INSTALL_Y_PAGEDOWN SizeX INSTALL_SX_MAIN SizeY INSTALL_SY_BIG RGBA 0 0 0 ColorAlphaNo OutlineSize 1.6 OutlineSides 0 0 0 0 OutlineRGBA 200 200 200 200 TextID 361 FormatID 6 Padding 3.0
end
if TempVar1 == 8 //Reset Deform
then
0AB1: call_scm_func @GUI_DrawBoxOutline_WithText 20 PosX INSTALL_X_MAIN PosY INSTALL_Y_UP_D SizeX INSTALL_SX_MAIN SizeY INSTALL_SY_BIG RGBA 0 0 0 ColorAlphaNo OutlineSize 1.6 OutlineSides 0 0 0 0 OutlineRGBA 200 200 200 200 TextID 362 FormatID 5 Padding 3.0
0AB1: call_scm_func @GUI_DrawBoxOutline_WithText 20 PosX INSTALL_X_MAIN PosY INSTALL_Y_RIGHT_D SizeX INSTALL_SX_MAIN SizeY INSTALL_SY_BIG RGBA 0 0 0 ColorAlphaNo OutlineSize 1.6 OutlineSides 0 0 0 0 OutlineRGBA 200 200 200 200 TextID 363 FormatID 5 Padding 3.0
0AB1: call_scm_func @GUI_DrawBoxOutline_WithText 20 PosX INSTALL_X_MAIN PosY INSTALL_Y_PAGEDOWN_D SizeX INSTALL_SX_MAIN SizeY INSTALL_SY_BIG RGBA 0 0 0 ColorAlphaNo OutlineSize 1.6 OutlineSides 0 0 0 0 OutlineRGBA 200 200 200 200 TextID 364 FormatID 6 Padding 3.0
0AB1: call_scm_func @GUI_DrawBoxOutline_WithText 20 PosX INSTALL_X_MAIN PosY INSTALL_Y_END_D SizeX INSTALL_SX_MAIN SizeY INSTALL_SY_BIG RGBA 0 0 0 ColorAlphaNo OutlineSize 1.6 OutlineSides 0 0 0 0 OutlineRGBA 200 200 200 200 TextID 365 FormatID 6 Padding 3.0
end
//if TempVar1 == 9
if TempVar1 == 10 //Reset pos
then
0AB1: call_scm_func @GUI_DrawBoxOutline_WithText 20 PosX INSTALL_X_MAIN PosY INSTALL_Y_UP SizeX INSTALL_SX_MAIN SizeY INSTALL_SY_BIG RGBA 0 0 0 ColorAlphaNo OutlineSize 1.6 OutlineSides 0 0 0 0 OutlineRGBA 200 200 200 200 TextID 369 FormatID 5 Padding 3.0
0AB1: call_scm_func @GUI_DrawBoxOutline_WithText 20 PosX INSTALL_X_MAIN PosY INSTALL_Y_RIGHT SizeX INSTALL_SX_MAIN SizeY INSTALL_SY_BIG RGBA 0 0 0 ColorAlphaNo OutlineSize 1.6 OutlineSides 0 0 0 0 OutlineRGBA 200 200 200 200 TextID 370 FormatID 5 Padding 3.0
0AB1: call_scm_func @GUI_DrawBoxOutline_WithText 20 PosX INSTALL_X_MAIN PosY INSTALL_Y_PAGEDOWN SizeX INSTALL_SX_MAIN SizeY INSTALL_SY_BIG RGBA 0 0 0 ColorAlphaNo OutlineSize 1.6 OutlineSides 0 0 0 0 OutlineRGBA 200 200 200 200 TextID 371 FormatID 6 Padding 3.0
end
//hr
0AB1: call_scm_func @GUI_DrawBoxOutline_WithText 20 PosX INSTALL_X_MAIN PosY INSTALL_Y_HR1 SizeX INSTALL_SX_MAIN SizeY INSTALL_SY_SMALL RGBA 0 0 0 -1 OutlineSize 1.0 OutlineSides 1 0 0 0 OutlineRGBA -2 -2 -2 200 TextID -1 FormatID -1 Padding -1
// Cmds
if key_pressed VK_CTRL
then TempVar2 = ColorAlphaYes
else TempVar2 = ColorAlphaNo
end
0AC6: TempVar1 = label @Text_CTRL offset
0A8D: TempVar1 = read_memory TempVar1 size 4 vp 0
if TempVar1 == 0
then
if 08B7: test BOOL bit bDEFORM
then TempVar1 = 320
else TempVar1 = 319
end
end
0AB1: call_scm_func @GUI_DrawBoxOutline_WithText 20 PosX INSTALL_X_MAIN PosY INSTALL_Y_CTRL SizeX INSTALL_SX_MAIN SizeY INSTALL_SY_SMALL RGBA 0 0 0 TempVar2 OutlineSize 1.6 OutlineSides 0 0 0 0 OutlineRGBA 200 200 200 200 TextID TempVar1 FormatID 7 {Install Small} Padding 3.0
if key_pressed VK_X
then TempVar2 = ColorAlphaYes
else TempVar2 = ColorAlphaNo
end
0AC6: TempVar1 = label @Text_X offset
0A8D: TempVar1 = read_memory TempVar1 size 4 vp 0
if TempVar1 == 0
then TempVar1 = 307
end
0AB1: call_scm_func @GUI_DrawBoxOutline_WithText 20 PosX INSTALL_X_MAIN PosY INSTALL_Y_X SizeX INSTALL_SX_MAIN SizeY INSTALL_SY_SMALL RGBA 0 0 0 TempVar2 OutlineSize 1.6 OutlineSides 0 0 0 0 OutlineRGBA 200 200 200 200 TextID TempVar1 FormatID 7 {Install Small} Padding 3.0
if key_pressed VK_S
then TempVar2 = ColorAlphaYes
else TempVar2 = ColorAlphaNo
end
0AC6: TempVar1 = label @Text_S offset
0A8D: TempVar1 = read_memory TempVar1 size 4 vp 0
if TempVar1 == 0
then TempVar1 = 317
end
0AB1: call_scm_func @GUI_DrawBoxOutline_WithText 20 PosX INSTALL_X_MAIN PosY INSTALL_Y_S SizeX INSTALL_SX_MAIN SizeY INSTALL_SY_SMALL RGBA 0 0 0 TempVar2 OutlineSize 1.6 OutlineSides 0 0 0 0 OutlineRGBA 200 200 200 200 TextID TempVar1 FormatID 7 {Install Small} Padding 3.0
if key_pressed VK_Z
then TempVar2 = ColorAlphaYes
else TempVar2 = ColorAlphaNo
end
0AC6: TempVar1 = label @Text_Z offset
0A8D: TempVar1 = read_memory TempVar1 size 4 vp 0
if TempVar1 == 0
then TempVar1 = 313
end
0AB1: call_scm_func @GUI_DrawBoxOutline_WithText 20 PosX INSTALL_X_MAIN PosY INSTALL_Y_Z SizeX INSTALL_SX_MAIN SizeY INSTALL_SY_SMALL RGBA 0 0 0 TempVar2 OutlineSize 1.6 OutlineSides 0 0 0 0 OutlineRGBA 200 200 200 200 TextID TempVar1 FormatID 7 {Install Small} Padding 3.0
if key_pressed VK_TAB
then TempVar2 = ColorAlphaYes
else TempVar2 = ColorAlphaNo
end
0AC6: TempVar1 = label @Text_TAB offset
0A8D: TempVar1 = read_memory TempVar1 size 4 vp 0
if TempVar1 == 0
then TempVar1 = 372
end
0AB1: call_scm_func @GUI_DrawBoxOutline_WithText 20 PosX INSTALL_X_MAIN PosY INSTALL_Y_TAB SizeX INSTALL_SX_MAIN SizeY INSTALL_SY_SMALL RGBA 0 0 0 TempVar2 OutlineSize 1.6 OutlineSides 0 0 0 0 OutlineRGBA 200 200 200 200 TextID TempVar1 FormatID 7 {Install Small} Padding 3.0
if key_pressed VK_SHIFT
then TempVar2 = ColorAlphaYes
else TempVar2 = ColorAlphaNo
end
0AC6: TempVar1 = label @Text_SHIFT offset
0A8D: TempVar1 = read_memory TempVar1 size 4 vp 0
if TempVar1 == 0
then TempVar1 = 373
end
0AB1: call_scm_func @GUI_DrawBoxOutline_WithText 20 PosX INSTALL_X_MAIN PosY INSTALL_Y_SHIFT SizeX INSTALL_SX_MAIN SizeY INSTALL_SY_SMALL RGBA 0 0 0 TempVar2 OutlineSize 1.6 OutlineSides 0 0 0 0 OutlineRGBA 200 200 200 200 TextID TempVar1 FormatID 7 {Install Small} Padding 3.0
//hr
0AB1: call_scm_func @GUI_DrawBoxOutline_WithText 20 PosX INSTALL_X_MAIN PosY INSTALL_Y_HR2 SizeX INSTALL_SX_MAIN SizeY INSTALL_SY_SMALL RGBA 0 0 0 -1 OutlineSize 1.0 OutlineSides 0 0 1 0 OutlineRGBA -2 -2 -2 200 TextID -1 FormatID -1 Padding -1
if key_pressed VK_D
then TempVar2 = ColorAlphaYes
else TempVar2 = ColorAlphaNo
end
if 08B7: test BOOL bit bDEFORM
then 0AB1: call_scm_func @GUI_DrawBoxOutline_WithText 20 PosX INSTALL_X_MAIN PosY INSTALL_Y_D SizeX INSTALL_SX_MAIN SizeY INSTALL_SY_SMALL RGBA 0 0 0 TempVar2 OutlineSize 1.6 OutlineSides 0 0 0 0 OutlineRGBA 200 200 200 200 TextID 337 FormatID 7 {Install Small} Padding 3.0
else 0AB1: call_scm_func @GUI_DrawBoxOutline_WithText 20 PosX INSTALL_X_MAIN PosY INSTALL_Y_D SizeX INSTALL_SX_MAIN SizeY INSTALL_SY_SMALL RGBA 0 0 0 TempVar2 OutlineSize 1.6 OutlineSides 0 0 0 0 OutlineRGBA 200 200 200 200 TextID 338 FormatID 7 {Install Small} Padding 3.0
end
if key_pressed VK_B
then TempVar2 = ColorAlphaYes
else TempVar2 = ColorAlphaNo
end
if 08B7: test BOOL bit bCMD_2
then 0AB1: call_scm_func @GUI_DrawBoxOutline_WithText 20 PosX INSTALL_X_MAIN PosY INSTALL_Y_B SizeX INSTALL_SX_MAIN SizeY INSTALL_SY_SMALL RGBA 0 0 0 TempVar2 OutlineSize 1.6 OutlineSides 0 0 0 0 OutlineRGBA 200 200 200 200 TextID 340 FormatID 7 {Install Small} Padding 3.0
else 0AB1: call_scm_func @GUI_DrawBoxOutline_WithText 20 PosX INSTALL_X_MAIN PosY INSTALL_Y_B SizeX INSTALL_SX_MAIN SizeY INSTALL_SY_SMALL RGBA 0 0 0 TempVar2 OutlineSize 1.6 OutlineSides 0 0 0 0 OutlineRGBA 200 200 200 200 TextID 339 FormatID 7 {Install Small} Padding 3.0
end
if key_pressed VK_V
then TempVar2 = ColorAlphaYes
else TempVar2 = ColorAlphaNo
end
if 08B7: test BOOL bit bCAMCAR
then 0AB1: call_scm_func @GUI_DrawBoxOutline_WithText 20 PosX INSTALL_X_MAIN PosY INSTALL_Y_V SizeX INSTALL_SX_MAIN SizeY INSTALL_SY_SMALL RGBA 0 0 0 TempVar2 OutlineSize 1.6 OutlineSides 0 0 0 0 OutlineRGBA 200 200 200 200 TextID 342 FormatID 7 {Install Small} Padding 3.0
else 0AB1: call_scm_func @GUI_DrawBoxOutline_WithText 20 PosX INSTALL_X_MAIN PosY INSTALL_Y_V SizeX INSTALL_SX_MAIN SizeY INSTALL_SY_SMALL RGBA 0 0 0 TempVar2 OutlineSize 1.6 OutlineSides 0 0 0 0 OutlineRGBA 200 200 200 200 TextID 341 FormatID 7 {Install Small} Padding 3.0
end
if key_pressed VK_C
then TempVar2 = ColorAlphaYes
else TempVar2 = ColorAlphaNo
end
if 08B7: test BOOL bit bDOOROPENED
then 0AB1: call_scm_func @GUI_DrawBoxOutline_WithText 20 PosX INSTALL_X_MAIN PosY INSTALL_Y_C SizeX INSTALL_SX_MAIN SizeY INSTALL_SY_SMALL RGBA 0 0 0 TempVar2 OutlineSize 1.6 OutlineSides 0 0 0 0 OutlineRGBA 200 200 200 200 TextID 343 FormatID 7 {Install Small} Padding 3.0
else 0AB1: call_scm_func @GUI_DrawBoxOutline_WithText 20 PosX INSTALL_X_MAIN PosY INSTALL_Y_C SizeX INSTALL_SX_MAIN SizeY INSTALL_SY_SMALL RGBA 0 0 0 TempVar2 OutlineSize 1.6 OutlineSides 0 0 0 0 OutlineRGBA 200 200 200 200 TextID 344 FormatID 7 {Install Small} Padding 3.0
end
if key_pressed VK_BACKSPACE
then TempVar2 = ColorAlphaYes
else TempVar2 = ColorAlphaNo
end
0AB1: call_scm_func @GUI_DrawBoxOutline_WithText 20 PosX INSTALL_X_MAIN PosY INSTALL_Y_BACKSPACE SizeX INSTALL_SX_MAIN SizeY INSTALL_SY_SMALL RGBA 0 0 0 TempVar2 OutlineSize 1.6 OutlineSides 0 0 0 0 OutlineRGBA 200 200 200 200 TextID 377 FormatID 7 {Install Small} Padding 3.0
gosub @GUI_TextFormat_SmallItem_Trans
03E4: set_text_draw_align_right 1
033E: set_draw_text_position 635.0 INSTALL_Y_VERSION GXT '_TMVERS'
// Infos
0AB1: call_scm_func @AngleToGxt 3 AX AY AZ
0AB1: call_scm_func @CoordToGxt 3 X Y Z
0AB1: call_scm_func @ScaleToGxt 3 SX SY SZ
0AB1: call_scm_func @DeformToGxt 4 DX DY DZ DW
TempVar1 = INSTALL_INFOS_Y1
for TempVar2 = 120 to 132
0AB1: call_scm_func @GUI_DrawBoxOutline_WithText 20 PosX 25.0 PosY TempVar1 SizeX 50.0 SizeY 10.0 RGBA 0 0 0 -1 OutlineSize 1.6 OutlineSides 0 0 0 0 OutlineRGBA 200 200 200 200 TextID TempVar2 FormatID 8 {Small Menu} Padding 5.0
TempVar1 += 10.0
if or
TempVar2 == 122
TempVar2 == 125
TempVar2 == 128
then TempVar1 += 5.0
end
end
// Logo
03E3: set_texture_to_be_drawn_antialiased 1
038D: draw_texture 0logo position 63.0 15.0 size 125.0 25.0 RGBA 255 255 255 150
// Footer
0AB1: call_scm_func @GUI_DrawBoxOutline_WithText 20 PosX 25.0 PosY 335.0 SizeX 50.0 SizeY 160.0 RGBA 0 0 0 150 OutlineSize 1.6 OutlineSides 1 1 0 0 OutlineRGBA 200 200 200 200 TextID -1 FormatID -1 Padding -1
0AB1: call_scm_func @GUI_DrawBoxOutline_WithText 20 PosX 25.0 PosY 440.0 SizeX 50.0 SizeY 50.0 RGBA 0 0 0 150 OutlineSize 1.6 OutlineSides 0 0 0 0 OutlineRGBA 200 200 200 200 TextID -1 FormatID -1 Padding -1
0AB1: call_scm_func @GUI_DrawBoxOutline_WithText 20 PosX 345.0 PosY 440.0 SizeX 590.0 SizeY 50.0 RGBA 0 0 0 150 OutlineSize 1.6 OutlineSides 1 0 0 0 OutlineRGBA 200 200 200 200 TextID -1 FormatID -1 Padding -1
gosub @GUI_TextFormat_SmallItem_Center
033E: set_draw_text_position 320.0 420.0 GXT '_TM_366' //accept
gosub @GUI_TextFormat_SmallItem_Center
033E: set_draw_text_position 320.0 430.0 GXT '_TM_367' //saveload
return
:GUI_StoreInstall_INIT
0AC6: 1@ = label @Text_X offset
0A8C: write_memory 1@ size 4 value 0 vp 0
0AC6: 1@ = label @Text_S offset
0A8C: write_memory 1@ size 4 value 0 vp 0
0AC6: 1@ = label @Text_Z offset
0A8C: write_memory 1@ size 4 value 0 vp 0
0AC6: 1@ = label @Text_CTRL offset
0A8C: write_memory 1@ size 4 value 0 vp 0
0AC6: 1@ = label @Text_SHIFT offset
0A8C: write_memory 1@ size 4 value 0 vp 0
0AC6: 1@ = label @Text_TAB offset
0A8C: write_memory 1@ size 4 value 0 vp 0
0AC6: 1@ = label @Text_ArrowsMode offset
0A8C: write_memory 1@ size 4 value 0 vp 0
0AB2: ret 0
:GUI_StoreInstall
0AC6: 0@ = label 0@ offset
0A8C: write_memory 0@ size 4 value 1@ vp 0
0AB2: ret 0
Os itens dando "pop-ups" pro lado:
São feitos assim:
Código: Selecionar tudo
// Add Extra
if ActiveRowInCol_1 == 1
then
if ProcessedRowInCol_1 == 1
then
21@ = MENU_Y1
for 20@ = 21 to 24
0AB1: call_scm_func @GUI_DrawBoxOutline_WithText 20 PosX MENU_X2 PosY 21@ SizeX MENU_SIZE_M SizeY 30.0 RGBA 0 0 0 180 OutlineSize 1.4 OutlineSides 1 0 0 0 OutlineRGBA 200 200 200 200 TextID 20@ FormatID 1 {Item Menu} Padding 5.0
21@ += 30.0
end
else
26@ = MENU_StartX2
0087: 27@ = 25@
27@ /= 2.0
005B: 26@ += 27@
21@ = MENU_Y1
for 20@ = 21 to 24
0AB1: call_scm_func @GUI_DrawBoxOutline_WithText 20 PosX 26@ PosY 21@ SizeX 25@ SizeY 30.0 RGBA 0 0 0 180 OutlineSize 1.4 OutlineSides 1 0 0 0 OutlineRGBA 200 200 200 200 TextID -1 FormatID 1 {Item Menu} Padding 5.0
21@ += 30.0
end
0079: 25@ += frame_delta_time * MenuItemMoveSpeed
if 25@ > MENU_SIZE_M
then
ProcessedRowInCol_1 = 1
end
end
end
etc etc... Pode parecer complicado usar, mas não.
Se você usar CLEO 4.1, facilmente baterá o limite de sprites na tela e vai dar bugs, crashes etc. Portanto é necessário CLEO 4.3 (ou superior).
Se você usar em algum mod, não te obrigo, mas se quiser dar créditos/agradecimentos pelo sistema eu fico grato.