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

Добавлен , опубликован
Системные требования подвезли

Новый патч Beta 1.32.0.6
  • Оптимизация производительности и улучшения стабильности для меню и игрового процесса
  • Обновлены шрифты локализаций
  • Во всех локализациях снова работают голосовые и портретные анимации
  • Восстановлена классическая камера (положение камеры изменилось на ~ 10%)
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'
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
28
4 года назад
Отредактирован PT153
0
Возможно я слишком много ждал от корпорации активижн близзард.
Всё как обычно, слышал звон, да не знаю, где он.
лазать по нескольким сайтам и искать цитаты, скрины и коменты, чтобы доказать двум незнакомым людям из комментов, что они неправы? Спасибо, но нет)
А вот полазил бы и проверил бы свои убеждения насчёт этого. Может, всё же неправ ты? Тем более, я скинул пару источников в комментарии выше.
рефордж пока больше фейл, чем вин
Про вов класскик тоже так говорили. Классика вышла - и что мы видим? "You think you want Classic and you really do".
Сейчас бы судить о успехе или провале игры по бете.

Сейчас можно увидеть только melee. Что для melee не готово, из того, что обещали?

я жду рефордж именно из-за технических нововведений, но именно их толком и нет.
Какие именно технические нововведения ты ожидаешь? Как вообще понимать слово технический в данном контексте?
5
27
4 года назад
5
PT153, это покажется тебе невероятным, но я уже давно и за темой на хайве слежу, и форум баттлнет читаю, и даже иногда в коменты ютуб заглядываю (ле фу). Просто я не готов ещё на несколько суток увязать в унылом бодании, где я буду кидать ссылки, а ты будешь цепляться к словам и открывать мне глаза на мир, как с WAA)
PT153:
Про вов класскик тоже так говорили.
Про ВоВ классик была специальная олимпиада графоманов - ведь изначально было ясно, что за продукт ожидается, как он будет выглядеть и работать, просто "в интернете кто-то неправ" (с). Мне лично всё равно, кто там что писал, я ждал классику, сейчас играю и получаю удовольствие.
PT153:
Сейчас можно увидеть только melee. Что для melee не готово, из того, что обещали?
Год назад нам показывали миссию про Стратхольм, что сейчас готово для кампаний? Ах да, они передумали что-либо делать с кампаниями. Кстати, а что собственно в мили могло не работать? Спасибо что не сломали, или что?
0
32
4 года назад
0
koloff, ну добавили, но добавили конечно не так как у современных игр, рендер мб еще что то вторичное вроде бнета будет многоядерное, основная движка скорее всего та же - ибо переписывать очень много. Хотя мб допилят, то что они не хвастаются об этом - скорее всего связано с неудачами.
5
30
4 года назад
5
Мне кажется, если отсеять "проблему излишней детализации", то остальное просто слишком большие ожидания от рефорджа. Обещали переработать графику и усовершенствовать редактор. Пасфайндинг не обещали - сломает все стратегии игры, плавные текстуры земли - сказали "возможно", но не говорили да.
3
28
4 года назад
Отредактирован PT153
3
покажется тебе невероятным
Нет, не покажется.
LongbowMan:
я уже давно и за темой на хайве слежу, и форум баттлнет читаю, и даже иногда в коменты ютуб заглядываю (ле фу). Просто я не готов ещё на несколько суток увязать в унылом бодании, где я буду кидать ссылки, а ты будешь цепляться к словам и открывать мне глаза на мир, как с WAA)
Красивые слова, что сказать, но вот ссылок пока не увидел, потому слова остаются словами. И цеплялся я не к словам, а к тезисам, мол, оказывается надо было довести WC3 до уровня SC2.
раскрыть
Если бы они действительно немного апскейльнули графон, где-то до уровня второго старика, и выпустили пару целительных патчей с приятными новыми плюшками, не было бы никаких претензий.
Про ВоВ классик была специальная олимпиада графоманов - ведь изначально было ясно, что за продукт ожидается, как он будет выглядеть и работать, просто "в интернете кто-то неправ" (с). Мне лично всё равно, кто там что писал, я ждал классику, сейчас играю и получаю удовольствие.
Тоже самое могу и я сказать. "Всё изначально было ясно, что это просто ремастер с переделкой кампании. Какие технические улучшения ожидались, кроме совместимости? Мне лично всё равно, кто там что писал, я ждал рефорджет, сейчас играю и получаю удовольствие"
Год назад нам показывали миссию про Стратхольм, что сейчас готово для кампаний?
Неизвестно, но ты уже успел окрести это как проваленное обещание.
Ах да, они передумали что-либо делать с кампаниями.
Нет, не передумали, на панели по Reforged эту ситуацию прояснили. Перевод и итоги на русском, видеоотчёт от Back2Warcraft.
Кстати, а что собственно в мили могло не работать? Спасибо что не сломали, или что?
Понятия не имею, ты же тут говоришь про невыполненные обещания. Вот я и спрашиваю, что из того, что уже доступно, сделано не так, как обещали?

И я всё ещё жду список того, какие именно технические нововведения ты ожидаешь. И желательно, почему.

Tiodor, подписываюсь под каждым словом, так всё и было.
8
20
4 года назад
Отредактирован ARCHIMONDE
8
В чем то вы правы по поводу графики, с овервотчем не сравним, там вообще детализация на много ниже на текстурках чем тут. Я когда впервые узнал что близы будут делать ремейк я представлял что-то мультяшное ну типа хотс, а когда увидел концепт и модель грунта то не понимал если честно как к этому относится, с одной стороны круто с другой нет.
По деньгам рефордж хорошо стал им, сейчас вернут на продажах одноразовых да и все, дай бог чтоб покрылись затраты. А то с этой бетой уже все поковыряли там, и потом покупать фиг будут, особенно если ничего кроме графы не добавят нового.
5
28
4 года назад
Отредактирован PT153
5
LongbowMan, всё, что я хотел выяснить, что за обещание были не выполнены, потому что из-за них я и предзаказывал. Эти обещания ты так и не озвучил: на вопрос Doc ты ответил, что он не прав в том, что всё радужно. Однако он не утверждал этого, он лишь спросил, какие обещания не были выполнены. Будут озвучены обещания, которые действительно не выполнили, со ссылками на надёжные источники (а не комменты ютуба) - будем бомбить вместе.

Выложили ролик к 25 лет WarCraft. Тут можно увидеть ролики из WC3 в лучшем качестве и новую озвучку в них.

На HIVE подвели итоги BlizzCon для Reforged.
В целом, для тех, кто следил за новостями, там ничего ничего нового нет. Но всё же некоторая новая информация есть.
5-го ноября (для Европы это будет 6-е ноября) будет патч для беты, где будет доступен WE. Ждём-с.
А я надеюсь, что мне дадут доступ к бете в ближайшее время.
5
24
4 года назад
Отредактирован koloff
5
Подитожим, это последняя инфа с Близкона:
?1. Общая информация:
  • Warcraft 3 Reforged по-прежнему должен выйти в 2019 году, дата релиза скоро появится.
  • Игра получит дополнительный контент после запуска, но «не обязательно кампании».
  • В настоящее время они находятся в стадии «полировки».
  • Улучшения производительности будут ближе к релизу.
?2. Бета:
  • Все люди, которые предварительно приобрели Reforged, получат доступ к бета-версии. Они все еще выкатывают бета-волны.
  • Сначала на очереди люди, купившие Spoils of War, затем обычную версию, а затем Virtual Ticket.
  • Нежить станет доступна во вторник. (5.11.19)
  • Ночные эльфы будут готовы к тестированию через 2 недели.
  • Редактор карт и кастомки так же станут доступны 5 ноября.????
  • Доступ к 3v3, 4v4 и FFA откроется опять же во вторник.
  • Бета-версия также будет включать в себя старый вариант графики.
?3. Мультиплеер и баланс:
  • Ладдер будет доступен на релизе.
  • Reforged будет иметь систему мачмейкинга и MMR, такую ??как Starcraft Remastered.
  • Команде разработчиков очень интересны отзывы сообщества о данной системе поиска матчей.
  • В игре будет отдельный MMR для каждой расы и каждого отдельного игрового режима.
  • Вновь можно будет создавать кланы.
  • Они рассматривают сделанные сообществом карты для мультиплеера.
  • Не планируется добавлять 5-ю игровую расу в мультиплеер.
  • Предел выбора 12-ти юнитов в группу не будет увеличен в мультиплеере.
  • В режиме наблюдателя добавят функцию уменьшения масштаба.??
  • Балансировать игру сложно - они признают, что допустили некоторые ошибки в 2018 году, меняя баланс, они стараются сохранить уникальность расы и обеспечить то, чтобы обоим игрокам было комфортно играть.
  • В целом они чувствуют, что баланс находится в довольно хорошем состоянии, но некоторые проблемы по-прежнему необходимо решать (например, ближние респы на Turtle Rock).
?4. Читабельность, внешний вид и звук:
  • Команда услышала отзывы о проблемах с читабельностью.
  • Они работают над улучшением силуэтов и командных цветов.
  • Они добавляют цветные полосы здоровья команды, чтобы улучшить их узнаваемость.
  • У героев будет специальный бар здоровья, чтобы они выделялись чуть больше.
  • Горный король станет больше.
  • Анимация бега Blademaster будет изменена, чтобы больше походить на оригинал.
  • Анимации немного ограничены, потому что они должны соответствовать классическим версиям.
  • У всех героев с именем (из кампаний) будут свои уникальные модели.
  • Все модели юнитов будут уникальными.
  • Всего выпущено более 2200 новых моделей.
  • Пользовательский интерфейс и меню не являются окончательными.
  • Классические звуки и элементы пользовательского интерфейса остаются в клиенте.
  • Они сохраняют за кадром оригинальную озвучку юнитов.
  • В Reforged добавлена ??новая музыка.
?5. Кампания и история:
  • Катсцены из демонстрации Blizzcon 2018 («Очищение Стратхольма») были отменены.
  • Они возвращаются к старым роликам в кинематографическом режиме, некоторые с новыми ракурсами и другой местностью.
  • Кинематики станут с более высоким разрешением и лучшим качеством.
  • Разработчики намекают на некоторые изменения в кампаниях.
  • Они хотят, чтобы в кампания был «мост» в WoW.
  • Кампании RoC, TFT и Rexxar будут доступны на релизе.
  • В кампании есть особо лёгкий режим «режиме истории» для игроков WoW (тех, кто не знакомые с RTS)
  • Кинематографический ролик Артас против Иллидана был перекован.
?6. Создание карты:
  • Они рады видеть, что сообщество делает с улучшенными функциями редактора.
  • Некоторые новые функции редактора, которые они упомянули: быстро удобно менять здоровье юнита и новые инструменты камеры.
  • Мапмэйкеры получат возможность изменить предел выбора в 12ти юнитов в группу в пользовательских играх.
  • Нет планов позволить мапмэйкерам монетизировать свои карты.
0
30
4 года назад
0
Нет планов позволить мапмэйкерам монетизировать свои карты.
А в SC2 монетизация есть =(
0
24
4 года назад
0
Clamp, будем считать это ложкой дёгтя, в бочке мёда?
10
27
4 года назад
Отредактирован Феникс
10
Не, ну, вырезать анимированные катсцены - это поуебдло, это ведь использовалось в качестве рекламы на предзаказ, а значит это нарушение законов о рекламе.

Вообще, это плевок в лицо фанатам: -не трогайте озвучку, оставьте оригинальные фразы; -мы учли пожелания фанатов и решили вырезать катсцены из разработки. We love u fans
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
В этом ресурсе отключено комментирование и оценки. Вы можете обратиться к автору напрямую.