hand

Ordem de Nascimento


No Duke3D, os locais de renascimentos são aleatórios (exceto em COOP), mas os primeiros nascimentos não são! Eles seguem uma ordem específica, e essa ordem é parte integral do balanceamento do mapa. Pense a respeito do mapa mais famoso em partidas 1v1 de todos os tempos: Hollywood Holocaust - seu balanceamento não seria o mesmo se o P2 nascesse em outro lugar que não fosse o banheiro... Devido a isso, o P2 acaba tendo vantagem de Medkit e de Steroids, pois o P1 precisa gastar seu Steroids para garantir o Jetpack, já o P2 pode pegar o seu próprio sem gastar seu Steroids. Como você provavelmente já deve saber, o ponto de nascimento do P1 será na "flecha", já os dos demais serão nas sprites APLAYER (DM -> lotag = 0, COOP -> lotag = 1)... Mas como a ordem de nascimento é definida pelo jogo? Bom, quanto mais alto for o ID da sprite APLAYER, então antes ela será escolhida pelo jogo. Isso quer dizer que, a ultima sprite APLAYER colocada no mapa será a primeira a ser usada. Logo, caso você queira ser capaz de escolher especificamente qual será a ordem de primeiro nascimento, você terá que colocar todas as sprites APLAYER em ordem reversa, ou então você terá depois que ficar trocando elas de posição uma a uma. Agora, deve ser óbvio que ao fazer mapas de CTF ou no estilo FORTS cada time terá sua própria base, e, assumindo que as bases sejam iguais, a ordem de nascimento também deve ser igual. Isso significa que não é suficiente que as sprites APLAYER estejam em posições simétricas, ambos os lados do mapa devem ter ordens de nascimento iguais para que o primeiro nascimento siga a mesma ordem. Não apenas isso, mas caso a Netflag
[TEAMS] Mixed Team Spawn Points
esteja sendo usada, então a ordem dos pontos de nascimento devem estar intercaladas (e.g. P1 Azul, P1 Vermelho, P2 Azul, P2 Vermelho, etc), caso contrário alguma base poderá ter mais players de início que a outra. Fazer esses ajustamentos manualmente seria bastante irritante e consumiria batante tempo, então, para ajudar com essa tarefa, nós implementamos algumas rotinas no script
produke.m32
para ajudar com o processo de ordenação das sprites APLAYER.
Assumindo que você seguiu todos os passos da seção Começando, o script
produke.m32
já estará sendo inicializado automaticamente. Então, para usar as rotinas de automatização nele presentes, tudo que você precisa fazer é abrir o console do Mapster32 (normalmente pela tecla ') e então digitar o comando
do NOME_ROTINA
. A seguir está a lista com todas as rotinas disponíveis:
Nome da rotina Descrição
po_get Coloca no
extra
de toda sprite APLAYER sua ordem atual (começando em 1).
Corretamente separa as sprites APLAYER em grupos distintos (COOP / DM / Time Azul / Time Vermelho / Time Verde / Time Marrom).
po_set Reordenada as sprites APLAYER com base no seu
extra
(primeiro chame po_get para preenchê-los para você, faça suas modificações, e então rode po_set).
Ao reordenar os pontos de nascimento de TIME, eles serão corretamente intercalados pelos times, para que caso esteja jogando com
[TEAMS] Mixed Team Spawn Points
, o nascimento inicial ainda esteja simétrico.
po_clear Apaga o
extra
das sprites APLAYER. Não é extremamente necessário, mas recomendado de fazer antes de lançar o mapa publicamente.
cam_get Similar ao po_get, mas para as sprites CAMERA1, já que elas seguem a mesma lógica (i.e. seguem ordem de ID).
cam_set Similar ao po_set, mas para as sprites CAMERA1.
cam_clear Similar ao po_clear, mas para as sprites CAMERA1.
ang_fix Ajusta o ângulo de sprites de efeito quando o ângulo possui significado, para que ao fazer uma inversão X+Y do mapa, os efeitos terão seus comportamentos preservados.
bump_tags Incrementa todas as tags de interligação não-zeradas em 5000.
actor_fix Seta o tamanho e o cstat das sprites actors para como elas são durante o jogo.
Não é o objetivo agora adentrar em todas as rotinas acima. Analisaremos apenas
po_get
e
po_set
por enquanto. Então, como explicado acima,
po_get
setará o extra de toda sprite APLAYER para sua ordem atual. Se você rodar
po_get
(abrindo o console e digitando
do po_get
) no E1L1.map por exemplo, ele setará o extra da sprite APLAYER do banheiro para 1 (pois é usado como ponto inicial do P2), setará o extra da que está no exit para 2 (pois é o ponto inicial do P3), e por assim em diante. A ideia é você ter preenchido o extra de toda sprite APLAYER para o valor que você escolher (primeiro chamando
po_get
e então editando as individualmente quando necessário pelo atalho
ALT + M
), e então chamar
po_set
para reordenar elas com base nos valores que você escolheu.