,

Бета версия Warcraft III Reforged 1.32

» опубликован
Новый патч Beta 1.32.0.5
  • Улучшение стабильности пользовательских игр
  • Значительно уменьшено время загрузки карты
  • Доступен классический режим для игры со старыми ассетами

Выход рефорджа назначен на 29 января 2:00 по Москве
Наконец-то новости после долгой тишины!

Датамайнер Мартин Бенджаминс запустил бета-версию Warcraft III Reforged, об этом он сообщил в твиттере
Перевод:
Первая бета-версия Warcraft III Reforged вышла несколько часов назад!
Название сборки "Beta Week 0 RC5 (Final RC)". Время проверить это!

Мне возможно не разрешат сделать больше, потому что у меня нет бета-лицензии, но эй, это что-то!
Ранее в файлах обновления клиента Battle.net было найдено упоминание о том что тестирование не будет доступно на устройствах с MacOS

Reforged будет показан на PAX AUS 2019 и на BlizzCon 2019

Так же появилась утечка с возможностью загрузить бета версию
Получение иконок
Крупные иконки

Озвучка

Иконки

Меню

Игра

Текстуры в HiveWE

Модели

Арты

Новые функции/нативки

» Изменения Common.j
» type
type minimapicon extends handle
type commandbuttoneffect extends handle
» Map Setup API
native SetEnemyStartLocPrioCount takes integer whichStartLoc, integer prioSlotCount returns nothing
native SetEnemyStartLocPrio takes integer whichStartLoc, integer prioSlotIndex, integer otherStartLocIndex, startlocprio priority returns nothing
» Native trigger interface
constant native ParseTags takes string taggedString returns string
» EVENT_COMMAND_BUTTON_CLICK
native TriggerRegisterCommandEvent takes trigger whichTrigger, integer whichAbility, string order returns event
native TriggerRegisterUpgradeCommandEvent takes trigger whichTrigger, integer whichUpgrade returns event
» Player API
constant native GetPlayerHandicapReviveTime takes player whichPlayer returns real
constant native GetPlayerHandicapDamage takes player whichPlayer returns real
constant native SetPlayerHandicapReviveTime takes player whichPlayer, real handicap returns nothing
constant native SetPlayerHandicapDamage takes player whichPlayer, real handicap returns nothing
» Game API
native SetMaxCheckpointSaves takes integer maxCheckpointSaves returns nothing
native SaveGameCheckpoint takes string saveFileName, boolean showWindow returns nothing
» Visual API
native SetPortraitLight takes string portraitDNCFile returns nothing
native CreateMinimapIconOnUnit takes unit whichUnit, integer red, integer green, integer blue, string pingPath, fogstate fogVisibility returns minimapicon
native CreateMinimapIconAtLoc takes location where, integer red, integer green, integer blue, string pingPath, fogstate fogVisibility returns minimapicon
native CreateMinimapIcon takes real x, real y, integer red, integer green, integer blue, string pingPath, fogstate fogVisibility returns minimapicon
native SkinManagerGetLocalPath takes string key returns string
native DestroyMinimapIcon takes minimapicon pingId returns nothing
native SetMinimapIconVisible takes minimapicon whichMinimapIcon, boolean visible returns nothing
native SetMinimapIconOrphanDestroy takes minimapicon whichMinimapIcon, boolean doDestroy returns nothing
» Camera API
native BlzCameraSetupSetLabel takes camerasetup whichSetup, string label returns nothing
native BlzCameraSetupGetLabel takes camerasetup whichSetup returns string
native CameraSetFocalDistance takes real distance returns nothing
native CameraSetDepthOfFieldScale takes real scale returns nothing
» Sound API
native SetSoundFacialAnimationLabel takes sound soundHandle, string animationLabel returns boolean
native SetSoundFacialAnimationGroupLabel takes sound soundHandle, string groupLabel returns boolean
native SetSoundFacialAnimationSetFilepath takes sound soundHandle, string animationSetFilepath returns boolean

//Subtitle support that is attached to the soundHandle rather than as disperate data with the legacy UI
native SetDialogueSpeakerNameKey takes sound soundHandle, string speakerName returns boolean
native GetDialogueSpeakerNameKey takes sound soundHandle returns string
native SetDialogueTextKey takes sound soundHandle, string dialogueText returns boolean
native GetDialogueTextKey takes sound soundHandle returns string
» Machinima API
native BlzHideCinematicPanels takes boolean enable returns nothing
» JAPI Functions
native BlzShowTerrain takes boolean show returns nothing
native BlzShowSkyBox takes boolean show returns nothing
native BlzStartRecording takes integer fps returns nothing
native BlzEndRecording takes nothing returns nothing
native BlzShowUnitTeamGlow takes unit whichUnit, boolean show returns nothing
native CreateCommandButtonEffect takes integer abilityId, string order returns commandbuttoneffect
native CreateUpgradeCommandButtonEffect takes integer whichUprgade returns commandbuttoneffect
native CreateLearnCommandButtonEffect takes integer abilityId returns commandbuttoneffect
native DestroyCommandButtonEffect takes commandbuttoneffect whichEffect returns nothing

// Skin
native BlzGetUnitSkin takes unit whichUnit returns integer
native BlzGetItemSkin takes item whichItem returns integer
// native BlzGetDestructableSkin takes destructable whichDestructable returns integer
native BlzSetUnitSkin takes unit whichUnit, integer skinId returns nothing
native BlzSetItemSkin takes item whichItem, integer skinId returns nothing
// native BlzSetDestructableSkin takes destructable whichDestructable, integer skinId returns nothing
native BlzCreateItemWithSkin takes integer itemid, real x, real y, integer skinId returns item
native BlzCreateUnitWithSkin takes player id, integer unitid, real x, real y, real face, integer skinId returns unit
native BlzCreateDestructableWithSkin takes integer objectid, real x, real y, real face, real scale, integer variation, integer skinId returns destructable
native BlzCreateDestructableZWithSkin takes integer objectid, real x, real y, real z, real face, real scale, integer variation, integer skinId returns destructable
native BlzCreateDeadDestructableWithSkin takes integer objectid, real x, real y, real face, real scale, integer variation, integer skinId returns destructable
native BlzCreateDeadDestructableZWithSkin takes integer objectid, real x, real y, real z, real face, real scale, integer variation, integer skinId returns destructable
native BlzGetPlayerTownHallCount takes player whichPlayer returns integer
» Изменения Blizzard.j
» Constants
constant real bj_HANDICAPDAMAGE_EASY = 50.00
constant real bj_HANDICAPREVIVE_NOTHARD = 50.00

// Auto Save constants
constant integer bj_MAX_CHECKPOINTS = 5

// Campaign offset constants (for mission indexing)
Было:
constant integer bj_CAMPAIGN_OFFSET_XN = 0
constant integer bj_CAMPAIGN_OFFSET_XH = 1
constant integer bj_CAMPAIGN_OFFSET_XU = 2
constant integer bj_CAMPAIGN_OFFSET_XO = 3
Стало:
constant integer bj_CAMPAIGN_OFFSET_XN = 5
constant integer bj_CAMPAIGN_OFFSET_XH = 6
constant integer bj_CAMPAIGN_OFFSET_XU = 7
constant integer bj_CAMPAIGN_OFFSET_XO = 8

// Mission indexing constants
constant integer bj_MISSION_INDEX_T02 = bj_CAMPAIGN_OFFSET_T * 1000 + 2
constant integer bj_MISSION_INDEX_T03 = bj_CAMPAIGN_OFFSET_T * 1000 + 3
constant integer bj_MISSION_INDEX_T04 = bj_CAMPAIGN_OFFSET_T * 1000 + 4

// Campaign Minimap icon styles
constant integer bj_CAMPPINGSTYLE_PRIMARY = 0
constant integer bj_CAMPPINGSTYLE_BONUS = 1
constant integer bj_CAMPPINGSTYLE_TURNIN = 2
constant integer bj_CAMPPINGSTYLE_BOSS = 3
constant integer bj_CAMPPINGSTYLE_CONTROL_ALLY = 4
constant integer bj_CAMPPINGSTYLE_CONTROL_NEUTRAL = 5
constant integer bj_CAMPPINGSTYLE_CONTROL_ENEMY = 6
» Last X'd vars
minimapicon bj_lastCreatedMinimapIcon = null
commandbuttoneffect bj_lastCreatedCommandButtonEffect = null
» Camera Utility Functions
function CameraSetupApplyForPlayerSmooth takes boolean doPan, camerasetup whichSetup, player whichPlayer, real forcedDuration, real easeInDuration, real easeOutDuration, real smoothFactor returns nothing
	if (GetLocalPlayer() == whichPlayer) then
		// Use only local code (no net traffic) within this block to avoid desyncs.
		call BlzCameraSetupApplyForceDurationSmooth(whichSetup, doPan, forcedDuration, easeInDuration, easeOutDuration, smoothFactor)
	endif
endfunction
» Event Registration Utility Functions
function TriggerRegisterBuildCommandEventBJ takes trigger trig, integer unitId returns event
	call TriggerRegisterCommandEvent(trig, 'ANbu', UnitId2String(unitId))
	call TriggerRegisterCommandEvent(trig, 'AHbu', UnitId2String(unitId))
	call TriggerRegisterCommandEvent(trig, 'AEbu', UnitId2String(unitId))
	call TriggerRegisterCommandEvent(trig, 'AObu', UnitId2String(unitId))
	call TriggerRegisterCommandEvent(trig, 'AUbu', UnitId2String(unitId))
	return TriggerRegisterCommandEvent(trig, 'AGbu', UnitId2String(unitId))
endfunction

function TriggerRegisterTrainCommandEventBJ takes trigger trig, integer unitId returns event
	return TriggerRegisterCommandEvent(trig, 'Aque', UnitId2String(unitId))
endfunction

function TriggerRegisterUpgradeCommandEventBJ takes trigger trig, integer techId returns event
	return TriggerRegisterUpgradeCommandEvent(trig, techId)
endfunction
» Environment Utility Functions
function GetLastCreatedMinimapIcon takes nothing returns minimapicon
	return bj_lastCreatedMinimapIcon
endfunction

function CreateMinimapIconOnUnitBJ takes unit whichUnit, integer red, integer green, integer blue, string pingPath, fogstate fogVisibility returns minimapicon
	set bj_lastCreatedMinimapIcon = CreateMinimapIconOnUnit(whichUnit, red, green, blue, pingPath, fogVisibility)
	return bj_lastCreatedMinimapIcon
endfunction

function CreateMinimapIconAtLocBJ takes location where, integer red, integer green, integer blue, string pingPath, fogstate fogVisibility returns minimapicon
	set bj_lastCreatedMinimapIcon = CreateMinimapIconAtLoc(where, red, green, blue, pingPath, fogVisibility)
	return bj_lastCreatedMinimapIcon
endfunction

function CreateMinimapIconBJ takes real x, real y, integer red, integer green, integer blue, string pingPath, fogstate fogVisibility returns minimapicon
	set bj_lastCreatedMinimapIcon = CreateMinimapIcon(x, y, red, green, blue, pingPath, fogVisibility)
	return bj_lastCreatedMinimapIcon
endfunction

function CampaignMinimapIconUnitBJ takes unit whichUnit, integer style returns nothing
	local integer red
	local integer green
	local integer blue
	local string path
	if ( style == bj_CAMPPINGSTYLE_PRIMARY ) then
	// green
	set red = 255
	set green = 0
	set blue = 0
	set path = SkinManagerGetLocalPath( "MinimapQuestObjectivePrimary" )
	elseif ( style == bj_CAMPPINGSTYLE_BONUS ) then
	// yellow
	set red = 255
	set green = 255
	set blue = 0
	set path = SkinManagerGetLocalPath( "MinimapQuestObjectiveBonus" )
	elseif ( style == bj_CAMPPINGSTYLE_TURNIN ) then
	// yellow
	set red = 255
	set green = 255
	set blue = 0
	set path = SkinManagerGetLocalPath( "MinimapQuestTurnIn" )
	elseif ( style == bj_CAMPPINGSTYLE_BOSS ) then
	// red
	set red = 255
	set green = 0
	set blue = 0
	set path = SkinManagerGetLocalPath( "MinimapQuestBoss" )
	elseif ( style == bj_CAMPPINGSTYLE_CONTROL_ALLY ) then
	// green
	set red = 0
	set green = 255
	set blue = 0
	set path = SkinManagerGetLocalPath( "MinimapQuestControlPoint" )
	elseif ( style == bj_CAMPPINGSTYLE_CONTROL_NEUTRAL ) then
	// white
	set red = 255
	set green = 255
	set blue = 255
	set path = SkinManagerGetLocalPath( "MinimapQuestControlPoint" )
	elseif ( style == bj_CAMPPINGSTYLE_CONTROL_ENEMY ) then
	// red
	set red = 255
	set green = 0
	set blue = 0
	set path = SkinManagerGetLocalPath( "MinimapQuestControlPoint" )
	endif
	call CreateMinimapIconOnUnitBJ( whichUnit, red, green, blue, path, FOG_OF_WAR_MASKED )
	call SetMinimapIconOrphanDestroy( bj_lastCreatedMinimapIcon, true )
endfunction

function CampaignMinimapIconLocBJ takes location where, integer style returns nothing
	local integer red
	local integer green
	local integer blue
	local string path
	if ( style == bj_CAMPPINGSTYLE_PRIMARY ) then
	// green (different from the unit version)
	set red = 0
	set green = 255
	set blue = 0
	set path = SkinManagerGetLocalPath( "MinimapQuestObjectivePrimary" )
	elseif ( style == bj_CAMPPINGSTYLE_BONUS ) then
	// yellow
	set red = 255
	set green = 255
	set blue = 0
	set path = SkinManagerGetLocalPath( "MinimapQuestObjectiveBonus" )
	elseif ( style == bj_CAMPPINGSTYLE_TURNIN ) then
	// yellow
	set red = 255
	set green = 255
	set blue = 0
	set path = SkinManagerGetLocalPath( "MinimapQuestTurnIn" )
	elseif ( style == bj_CAMPPINGSTYLE_BOSS ) then
	// red
	set red = 255
	set green = 0
	set blue = 0
	set path = SkinManagerGetLocalPath( "MinimapQuestBoss" )
	elseif ( style == bj_CAMPPINGSTYLE_CONTROL_ALLY ) then
	// green
	set red = 0
	set green = 255
	set blue = 0
	set path = SkinManagerGetLocalPath( "MinimapQuestControlPoint" )
	elseif ( style == bj_CAMPPINGSTYLE_CONTROL_NEUTRAL ) then
	// white
	set red = 255
	set green = 255
	set blue = 255
	set path = SkinManagerGetLocalPath( "MinimapQuestControlPoint" )
	elseif ( style == bj_CAMPPINGSTYLE_CONTROL_ENEMY ) then
	// red
	set red = 255
	set green = 0
	set blue = 0
	set path = SkinManagerGetLocalPath( "MinimapQuestControlPoint" )
	endif
	call CreateMinimapIconAtLocBJ( where, red, green, blue, path, FOG_OF_WAR_MASKED )
endfunction
» Command Button Effect Utility Functions
function CreateCommandButtonEffectBJ takes integer abilityId, string order returns commandbuttoneffect
	set bj_lastCreatedCommandButtonEffect = CreateCommandButtonEffect(abilityId, order)
	return bj_lastCreatedCommandButtonEffect
endfunction

function CreateTrainCommandButtonEffectBJ takes integer unitId returns commandbuttoneffect
	set bj_lastCreatedCommandButtonEffect = CreateCommandButtonEffect('Aque', UnitId2String(unitId))
	return bj_lastCreatedCommandButtonEffect
endfunction

function CreateUpgradeCommandButtonEffectBJ takes integer techId returns commandbuttoneffect
	set bj_lastCreatedCommandButtonEffect = CreateUpgradeCommandButtonEffect(techId)
	return bj_lastCreatedCommandButtonEffect
endfunction

function CreateLearnCommandButtonEffectBJ takes integer abilityId returns commandbuttoneffect
	set bj_lastCreatedCommandButtonEffect = CreateLearnCommandButtonEffect(abilityId)
	return bj_lastCreatedCommandButtonEffect
endfunction

function CreateBuildCommandButtonEffectBJ takes integer unitId returns commandbuttoneffect
	local race r = GetPlayerRace(GetLocalPlayer())
	local integer abilityId
	if (r == RACE_HUMAN) then
		set abilityId = 'AHbu'
	elseif (r == RACE_ORC) then
		set abilityId = 'AObu'
	elseif (r == RACE_UNDEAD) then
		set abilityId = 'AUbu'
	elseif (r == RACE_NIGHTELF) then
		set abilityId = 'AEbu'
	else
		set abilityId = 'ANbu'
	endif
	set bj_lastCreatedCommandButtonEffect = CreateCommandButtonEffect(abilityId, UnitId2String(unitId))
	return bj_lastCreatedCommandButtonEffect
endfunction

function GetLastCreatedCommandButtonEffectBJ takes nothing returns commandbuttoneffect
	return bj_lastCreatedCommandButtonEffect
endfunction
» Hero and Item Utility Functions
function SetPlayerHandicapDamageBJ takes player whichPlayer, real handicapPercent returns nothing
	call SetPlayerHandicapDamage(whichPlayer, handicapPercent * 0.01)
endfunction

function GetPlayerHandicapDamageBJ takes player whichPlayer returns real
	return GetPlayerHandicapDamage(whichPlayer) * 100
endfunction

function SetPlayerHandicapReviveTimeBJ takes player whichPlayer, real handicapPercent returns nothing
	call SetPlayerHandicapReviveTime(whichPlayer, handicapPercent * 0.01)
endfunction

function GetPlayerHandicapReviveTimeBJ takes player whichPlayer returns real
	return GetPlayerHandicapReviveTime(whichPlayer) * 100
endfunction
» Cinematic Transmission Utility Functions
Было:
function SetCinematicSceneBJ takes sound soundHandle, integer portraitUnitId, playercolor color, string speakerTitle, string text, real sceneDuration, real voiceoverDuration returns nothing
	set bj_cineSceneLastSound = soundHandle
	call PlaySoundBJ(soundHandle)
	call SetCinematicScene(portraitUnitId, color, speakerTitle, text, sceneDuration, voiceoverDuration)
endfunction
Стало:
function SetCinematicSceneBJ takes sound soundHandle, integer portraitUnitId, playercolor color, string speakerTitle, string text, real sceneDuration, real voiceoverDuration returns nothing
	set bj_cineSceneLastSound = soundHandle
	call SetCinematicScene(portraitUnitId, color, speakerTitle, text, sceneDuration, voiceoverDuration)
	call PlaySoundBJ(soundHandle)
endfunction

Было:
function TransmissionFromUnitWithNameBJ takes force toForce, unit whichUnit, string unitName, sound soundHandle, string message, integer timeType, real timeVal, boolean wait returns nothing
	call TryInitCinematicBehaviorBJ()
	// Ensure that the time value is non-negative.
	set timeVal = RMaxBJ(timeVal, 0)
	set bj_lastTransmissionDuration = GetTransmissionDuration(soundHandle, timeType, timeVal)
	set bj_lastPlayedSound = soundHandle
	if (IsPlayerInForce(GetLocalPlayer(), toForce)) then
		// Use only local code (no net traffic) within this block to avoid desyncs.
		if (whichUnit == null) then
			// If the unit reference is invalid, send the transmission from the center of the map with no portrait.
			call DoTransmissionBasicsXYBJ(0, PLAYER_COLOR_RED, 0, 0, soundHandle, unitName, message, bj_lastTransmissionDuration)
		else
			call DoTransmissionBasicsXYBJ(GetUnitTypeId(whichUnit), GetPlayerColor(GetOwningPlayer(whichUnit)), GetUnitX(whichUnit), GetUnitY(whichUnit), soundHandle, unitName, message, bj_lastTransmissionDuration)
			if (not IsUnitHidden(whichUnit)) then
				call UnitAddIndicator(whichUnit, bj_TRANSMISSION_IND_RED, bj_TRANSMISSION_IND_BLUE, bj_TRANSMISSION_IND_GREEN, bj_TRANSMISSION_IND_ALPHA)
			endif
		endif
	endif
	if wait and (bj_lastTransmissionDuration 0) then
		// call TriggerSleepAction(bj_lastTransmissionDuration)
		call WaitTransmissionDuration(soundHandle, timeType, timeVal)
	endif
endfunction
Стало:
function TransmissionFromUnitWithNameBJ takes force toForce, unit whichUnit, string unitName, sound soundHandle, string message, integer timeType, real timeVal, boolean wait returns nothing
	call TryInitCinematicBehaviorBJ()
	call AttachSoundToUnit(soundHandle, whichUnit)
	// Ensure that the time value is non-negative.
	set timeVal = RMaxBJ(timeVal, 0)
	set bj_lastTransmissionDuration = GetTransmissionDuration(soundHandle, timeType, timeVal)
	set bj_lastPlayedSound = soundHandle
	if (IsPlayerInForce(GetLocalPlayer(), toForce)) then
		// Use only local code (no net traffic) within this block to avoid desyncs.
		if (whichUnit == null) then
			// If the unit reference is invalid, send the transmission from the center of the map with no portrait.
			call DoTransmissionBasicsXYBJ(0, PLAYER_COLOR_RED, 0, 0, soundHandle, unitName, message, bj_lastTransmissionDuration)
		else
			call DoTransmissionBasicsXYBJ(GetUnitTypeId(whichUnit), GetPlayerColor(GetOwningPlayer(whichUnit)), GetUnitX(whichUnit), GetUnitY(whichUnit), soundHandle, unitName, message, bj_lastTransmissionDuration)
			if (not IsUnitHidden(whichUnit)) then
				call UnitAddIndicator(whichUnit, bj_TRANSMISSION_IND_RED, bj_TRANSMISSION_IND_BLUE, bj_TRANSMISSION_IND_GREEN, bj_TRANSMISSION_IND_ALPHA)
			endif
		endif
	endif
	if wait and (bj_lastTransmissionDuration 0) then
		// call TriggerSleepAction(bj_lastTransmissionDuration)
		call WaitTransmissionDuration(soundHandle, timeType, timeVal)
	endif
endfunction

function PlayDialogueFromSpeaker takes force toForce, unit speaker, sound soundHandle, integer timeType, real timeVal, boolean wait returns nothing
	call TryInitCinematicBehaviorBJ()
	call AttachSoundToUnit(soundHandle, speaker)
	// Ensure that the time value is non-negative.
	set timeVal = RMaxBJ(timeVal, 0)
	set bj_lastTransmissionDuration = GetTransmissionDuration(soundHandle, timeType, timeVal)
	set bj_lastPlayedSound = soundHandle
	if (IsPlayerInForce(GetLocalPlayer(), toForce)) then
		call PlaySoundBJ(soundHandle)
	endif
	if wait and (bj_lastTransmissionDuration 0) then
		// call TriggerSleepAction(bj_lastTransmissionDuration)
		call WaitTransmissionDuration(soundHandle, timeType, timeVal)
	endif
endfunction

function PlayDialogueFromSpeakerEx takes force toForce, unit speaker, integer speakerType, sound soundHandle, integer timeType, real timeVal, boolean wait returns boolean
	//Make sure that the runtime unit type and the parameter are the same,
	//otherwise the offline animations will not match and will fail
	if GetUnitTypeId(speaker) != speakerType then
		debug call BJDebugMsg(("Attempted to play FacialAnimation with the wrong speaker UnitType - Param: " + I2S(speakerType) + " Runtime: " + I2S(GetUnitTypeId(speaker))))
		//return false
	endif
	call TryInitCinematicBehaviorBJ()
	call AttachSoundToUnit(soundHandle, speaker)
	// Ensure that the time value is non-negative.
	set timeVal = RMaxBJ(timeVal, 0)
	set bj_lastTransmissionDuration = GetTransmissionDuration(soundHandle, timeType, timeVal)
	set bj_lastPlayedSound = soundHandle
	if (IsPlayerInForce(GetLocalPlayer(), toForce)) then
		call SetCinematicSceneBJ(soundHandle, speakerType, GetPlayerColor(GetLocalPlayer()), GetLocalizedString(GetDialogueSpeakerNameKey(soundHandle)), GetLocalizedString(GetDialogueTextKey(soundHandle)), bj_lastTransmissionDuration + bj_TRANSMISSION_PORT_HANGTIME, bj_lastTransmissionDuration)
	endif
	if wait and (bj_lastTransmissionDuration 0) then
		// call TriggerSleepAction(bj_lastTransmissionDuration)
		call WaitTransmissionDuration(soundHandle, timeType, timeVal)
	endif
	return true
endfunction

function PlayDialogueFromSpeakerType takes force toForce, player fromPlayer, integer speakerType, location loc, sound soundHandle, integer timeType, real timeVal, boolean wait returns boolean
	call TryInitCinematicBehaviorBJ()
	// Ensure that the time value is non-negative.
	set timeVal = RMaxBJ(timeVal, 0)
	set bj_lastTransmissionDuration = GetTransmissionDuration(soundHandle, timeType, timeVal)
	set bj_lastPlayedSound = soundHandle
	if (IsPlayerInForce(GetLocalPlayer(), toForce)) then
		call SetCinematicSceneBJ(soundHandle, speakerType, GetPlayerColor(fromPlayer), GetLocalizedString(GetDialogueSpeakerNameKey(soundHandle)), GetLocalizedString(GetDialogueTextKey(soundHandle)), bj_lastTransmissionDuration + bj_TRANSMISSION_PORT_HANGTIME, bj_lastTransmissionDuration)
		if(speakerType != 0) then
			call PingMinimap(GetLocationX(loc), GetLocationY(loc), bj_TRANSMISSION_PING_TIME)
		endif
	endif
	if wait and (bj_lastTransmissionDuration 0) then
		// call TriggerSleepAction(bj_lastTransmissionDuration)
		call WaitTransmissionDuration(soundHandle, timeType, timeVal)
	endif
	return true
endfunction

function PlayDialogueFromSpeakerTypeEx takes force toForce, player fromPlayer, integer speakerType, location loc, sound soundHandle, integer timeType, real timeVal, boolean wait returns boolean
	return PlayDialogueFromSpeakerType(toForce, fromPlayer, speakerType, loc, soundHandle, timeType, timeVal, wait)
endfunction
» Placeholder function for auto save feature
function SaveGameCheckPointBJ takes string mapSaveName, boolean doCheckpointHint returns nothing
	call SaveGameCheckpoint(mapSaveName, doCheckpointHint)
endfunction
» Melee Template Victory / Defeat Conditions
Было:
function MeleeGetAllyKeyStructureCount takes player whichPlayer returns integer
	local integer playerIndex
	local player indexPlayer
	local integer keyStructs
	// Count the number of buildings controlled by all not-yet-defeated co-allies.
	set keyStructs = 0
	set playerIndex = 0
	loop
		set indexPlayer = Player(playerIndex)
		if (PlayersAreCoAllied(whichPlayer, indexPlayer)) then
			set keyStructs = keyStructs + GetPlayerTypedUnitCount(indexPlayer, "townhall", true, true)
			set keyStructs = keyStructs + GetPlayerTypedUnitCount(indexPlayer, "greathall", true, true)
			set keyStructs = keyStructs + GetPlayerTypedUnitCount(indexPlayer, "treeoflife", true, true)
			set keyStructs = keyStructs + GetPlayerTypedUnitCount(indexPlayer, "necropolis", true, true)
		endif
		set playerIndex = playerIndex + 1
		exitwhen playerIndex == bj_MAX_PLAYERS
	endloop
	return keyStructs
endfunction
Стало:
function MeleeGetAllyKeyStructureCount takes player whichPlayer returns integer
	local integer playerIndex
	local player indexPlayer
	local integer keyStructs
	// Count the number of buildings controlled by all not-yet-defeated co-allies.
	set keyStructs = 0
	set playerIndex = 0
	loop
		set indexPlayer = Player(playerIndex)
		if (PlayersAreCoAllied(whichPlayer, indexPlayer)) then
			set keyStructs = BlzGetPlayerTownHallCount(indexPlayer)
		endif
		set playerIndex = playerIndex + 1
		exitwhen playerIndex == bj_MAX_PLAYERS
	endloop
	return keyStructs
endfunction
» Изменения Common.ai
constant integer FOREST_TROLL = 'nftr'


Просмотров: 49 125



» Лучшие комментарии


Зверобойщик #1401 - 4 дня назад (отредактировано ) -4
TFT вышел в 2003,
Я знаю. Я имел в виду варкрафт 1/2 где архитектурная концепция перешла и в варкрафт 3.
koloff:
Вар 3 после второго, был прорывным,
Вот вы и ответили, прошло уже 17, а кроме графики ничего нам нового разрабы не предлагают. Где новый прорыв?
koloff:
и как показало время, эта концепция пользуется гораздо большей популярностью, чем Войны Древности.
Если бы не редактор тиггеров и возможность создания модов, чёрта с два эта игра продержалась так долго у фанатов.

что до сих пор там не изобрели атомную бомбу?
Кстати, той кто не знает, атомная бомба есть в WarCraft 2000.
Dazz Lighter #1402 - 4 дня назад 5
Зверобойщик, Warcraft не кастомками едиными жив, далеко не одними ими. Здания размером с юнитов и кислотные цвета это лицо игры, её фирменный, уникальный и узнаваемый стиль. Дизайн настолько хорош, что великолепно смотрится спустя и двадцатилетие. То, что предлагаете вы, сделало бы игру более безликой, безвкусной и несуразной.
PT153 #1403 - 4 дня назад (отредактировано ) 3
Где новый прорыв?
Так это просто ремейк\ремастер, о каком прорыве может идти речь?

Здания размером с юнитов
И это черта свойственна не только WC3, но и серии C&C, на первую часть которой тоже делают ремастер. А какие-то люди требуют в ремастере C&C сделать 3D.
PornoMishka #1404 - 4 дня назад (отредактировано ) 4
Зверобойщик, это не варкарфт 4, это просто переиздание морально устаревшей в плане графики игры, большая глупость ждать изменения базовых механик и всего такого. К счастью Вы можете создать карту похожую на Спарту и т.д., с нужными пропорциями и "реализмом".
koloff #1405 - 4 дня назад 0
Если бы не редактор тиггеров и возможность создания модов, чёрта с два эта игра продержалась так долго у фанатов.
Ну так редактор, это же часть игры? Он обладает практически безграничными возможностями, делать не только игры, но и машиниму, причём при желании можно сделать любой стиль, а не только как в кампаниях входящих в сам Вар:
NanO #1406 - 4 дня назад 2
Плюс вара в том, что ты можешь сделать в редакторе сейчас практически что угодно.
Не понимаю, о чем сыр-бор.
2 комментария удалено
Зверобойщик #1409 - 4 дня назад (отредактировано ) -11
Здания размером с юнитов и кислотные цвета это лицо игры, её фирменный, уникальный и узнаваемый стиль. Дизайн настолько хорош, что великолепно смотрится спустя и двадцатилетие.
Таким шлаком уже завален весь ВКонтакт с Фейсбуком и пол интернета. Пора бы выходить на новый уровень.
PT153:
Так это просто ремейк\ремастер, о каком прорыве может идти речь?
Зверобойщик, это не варкарфт 4, это просто переиздание морально устаревшей в плане графики игры,
А могли ведь сделать и четвертый варкарфт.
Вот, серия Age of Empires пополнилась двумя ремастерами и на подходе четвертая часть.
Я, конечно, понимаю, у каждой серии свой жанр и стилистика, но может пора уже выходить с детства? Я не предлагаю создавать тотал вар, но добавили бы более продвинутую концепцию.
Просто я склонен к реализму, а как говорится: "на вкус и жанр стратегии нет". Если вам нравится оставаться в детстве, значит оставайтесь, это ваше дело.
koloff:
Ну так редактор, это же часть игры? Он обладает практически безграничными возможностями, делать не только игры, но и машиниму, причём при желании можно сделать любой стиль, а не только как в кампаниях входящих в сам Вар:
Плюс вара в том, что ты можешь сделать в редакторе сейчас практически что угодно.
Не понимаю, о чем сыр-бор.
И я не пойму, о чем сыр-бор. Так как вы подтвердили мои же слова. Если в любой другой игре был бы такой гибкий редактор всяких триггеров, это продлило бы жизнь многим другим играм среди их же фанатов
замечание от : это отлично, что у вас есть свое мнение, но давайте не будем уходить в оффтопик или в бессмысленные кидания говн в друг друга
Это сообщение удалено
NanO #1411 - 4 дня назад (отредактировано ) 5
И я не пойму, о чем сыр-бор. Так как вы подтвердили мои же слова. Если в любой другой игре был бы такой гибкий редактор всяких триггеров, это продлило бы жизнь многим другим играм среди их же фанатов
Но его там нет, а тут есть.
С добавлением редактора UI, LUA, отлова клавиш и мыши, апскейлом моделей и текстур, по сути перед нами практически полноценный игровой движок с мелкими оговорками. Хочешь, чтобы юниты бегали по стенам - вперед. Хочешь крутую RPG от третьего лица - вперед. Хочешь FPS - вперед.
замечание от : еще один переход на личности в этой теме от кого-нибудь, и полетят сайленсы
3 комментария удалено
MagicAlan #1415 - 4 дня назад 0
А есть тут ребята, умеющие работать с триггерами, желающие сделать что-то вроде доты на вар3рефордж? Ну своеобразную, естественно. С меня ландшафт и концепт идей.
PT153 #1416 - 4 дня назад 0
MagicAlan, конечно есть.
PornoMishka #1417 - 4 дня назад 0
MagicAlan, есть, хотя лично мне пока сложнее включиться в нормальный скриптинг на Lua, ждем релиза.
koloff #1418 - 4 дня назад 0
Меня вот интересует вопрос, каков набор анимок в модельках в Рефорже? Их количество, и есть ли необходимый/базовый набор для машинимы, типа ходьбы и портрейт талк? А так - да, флудим в ожидании релиза...
LongbowMan #1419 - 4 дня назад 0
Вопрос к знатокам. Кто-нибудь располагает информацией, в новой версии mdx будет возможность иметь две нормали на одну вершину? Сейчас условный кубик освещается в варе как шар, если вершины у поверхностей общие - чтобы он освещался с чёткими краями, у каждой плоскости должны быть свои вершины. Может они это улучшат наконец...
bOrissko #1420 - 4 дня назад 0
koloff
С моделями вообще неясно что напридумывали. Мне самому интересно что насчёт имитации разговора ведь там своя система должна была быть от неё отказались, а модели по умолчанию не имеют «разговорных анимаций» переделывать им получается все модели что ли нужно.
Также оказывается есть скрытые анимации или что то типо того, смотрел через Retera, у многих моделей есть специальные анимации для синиматики. Не понятно.
Tiodor #1421 - 4 дня назад 0
LongbowMan:
Вопрос к знатокам. Кто-нибудь располагает информацией, в новой версии mdx будет возможность иметь две нормали на одну вершину? Сейчас условный кубик освещается в варе как шар, если вершины у поверхностей общие - чтобы он освещался с чёткими краями, у каждой плоскости должны быть свои вершины. Может они это улучшат наконец...
а разве он нормализует все нормали, если в максе, например, выставил разные группы сглаживания? мне казалось, что в варе с этим норм всё было.
prog #1422 - 4 дня назад 0
Я не могу назвать с ходу ни одной игры, которая позволяла бы в формате моделей две и больше нормали на вершину. Как правило, просто идет автоматический сплит вершин на этапе конвертации из формата 3д-тулзы в формат игры.
koloff #1423 - 4 дня назад (отредактировано ) 0
модели по умолчанию не имеют «разговорных анимаций»
Нет, они есть, просто в редакторе, при выборе модельки, не отображаются, Вар понимает только определённые названия анимок, "portrait talk" и "пронумерованные cinematic" в их число не входят. Так было с модельками вытащенными из Вов, и велика вероятность, что так и останется. А ходить они умеют? "Walk" должны отображаться в окошке модельки, при её выборе.

Знакомый глянул набор анимок у Артаса в Рефордже, всего 44 штуки, ходить и бегать может по желанию, в общем, получается, что набор анимок лучше, чем в оригинальном Варе, но хуже, чем у моделек из Вов, у тех, под три сотни, у людей набор. Вот и думай теперь, покупать Рефорж или нет=(
LongbowMan #1424 - 4 дня назад 0
Tiodor, в текущей версии мдлвис у одной вершины может быть только одна нормаль. Надо не в максе смотреть, а в финалке проверять.
koloff #1425 - 4 дня назад 0
Артас знаковая фигура, у других моделек набор попроще, у пехотинца 28 штучек.

Блин, одновременно коменты тиснули=)
Tiodor #1426 - 3 дня назад 0
LongbowMan:
Tiodor, в текущей версии мдлвис у одной вершины может быть только одна нормаль. Надо не в максе смотреть, а в финалке проверять.
ну мдлвис я думаю больше не понадобится. Дальше - 3дмакс, чтобы нормально юзать карту нормалей и металла. Хотя может сделают конвертер для fbx формата, чтобы не делать под конкретный софт, хз.
Proshel_Doty #1427 - 3 дня назад 0
Вот и думай теперь, покупать Рефорж или нет=(
Просто подождать 2 недели =\
Maxsavin #1428 - 3 дня назад 0
koloff, не подскажешь, как это можно посмотреть все анимации у моделек?
LongbowMan #1429 - 2 дня назад (отредактировано ) 0
Tiodor, мы немного о разном. Модельки я вообще в Maya делаю. Вопрос не в конвертации, а в том, что если я хочу, чтобы грани освещались чётко, мне приходится разделять плоскости, чтобы у них не было общих вершин, т.к. финальный формат (mdx) не поддерживает больше одной нормали у вершины. Пока что я подозреваю, что они просто обошли это запеканием карт нормалей в моделях рефорджа, а формат не обновляли толком.
ScorpioT1000 #1430 - 2 дня назад 0
LongbowMan, да, это реальное ограничение, я в xgm.guru/p/wc3/xldataconverter с этим встретился
prog #1431 - 2 дня назад 0
LongbowMan, ScorpioT1000, покажите мне формат модели который бы это поддерживал и при этом был предназначен для использования в игре, а не в 3д софте...
Обходится это ограничение, традиционно, автоматическим разделением граней при сохранении в итоговый формат. Ну и карты нормалей тоже не просто так придумали, конечно.
MagicAlan #1432 - 1 день назад 3
ScopteRectuS #1434 - 21 час назад 0
MagicAlan, это модели рефорджа или импортные?
pro100master #1435 - 21 час назад 0
ScopteRectuS, думаю 90% рефордж
Clamp #1436 - 21 час назад (отредактировано ) 0
Посмотрел на эти водопады короче и пошёл поставил себе винду, чтобы потыкать в создание уровней, с такими-то новыми красками <3
Водопады в варкрафте — хлеб и масло всех сколько-нибудь шарящих левелартистов, почти клише, но неизменно круто выглядят, если хоть чуть-чуть вкуса есть.
LongbowMan #1437 - 20 часов назад (отредактировано ) 0
Кстати, в водопадах заметил одну фишку, которой раньше очень не хватало в варе: анимированная текстура с НЕанимированным альфа каналом - вода сверху появляется плавно. Вот это действительно радует. А сами водопады похожи на слизь, жду нормальных кастомных водопадов, когда выйдет инструментарий для конверта моделей
Meddin #1438 - 18 часов назад 0
Интересно, следы дождя на воде и всплески от попаданий артиллерии в воду завезут или нет?
tysch_tysch #1439 - 16 часов назад 0
Clamp, на маке поставил? Или на стационарник. Если на мак, поделись ощущениями как играется на таком гибриде)
Clamp #1440 - 15 часов назад 0
tysch_tysch, на мак, играется нормально, у меня отдельные клава и мышь

Места на диске только маловато для полноценного гейминга, 256гб всего, 128гб на винду.
MagicAlan #1441 - 14 часов назад 0
ScopteRectuS:
MagicAlan, это модели рефорджа или импортные?
Да, это рефордж.
pro100master #1442 - 14 часов назад 0
Meddin:
Интересно, следы дождя на воде и всплески от попаданий артиллерии в воду завезут или нет?
Так в классике есть брызги от дождя в попадание в воде.