1. Друзья, в это тяжёлое и непонятное для всех нас время мы просим вас воздержаться от любых упоминаний политики на форуме, - этим ситуации не поможешь, а только возникнут ненужные ссоры и обиды. Это касается также шуток и юмора на тему конфликта. Пусть войны будут только виртуальными, а политики решают разногласия дипломатическим путём. С уважением, администрация Old-Games.RU.

    Скрыть объявление
  2. Пожалуйста, внимательно прочитайте правила раздела.
  3. Если Вы видите это сообщение, значит, вы ещё не зарегистрировались на нашем форуме.

    Зарегистрируйтесь, если вы хотите принять участие в обсуждениях. Перед регистрацией примите к сведению:
    1. Не регистрируйтесь с никами типа asdfdadhgd, 354621 и тому подобными, не несущими смысловой нагрузки (ник должен быть читаемым!): такие пользователи будут сразу заблокированы!
    2. Не регистрируйте больше одной учётной записи. Если у вас возникли проблемы при регистрации, то вы можете воспользоваться формой обратной связи внизу страницы.
    3. Регистрируйтесь с реально существующими E-mail адресами, иначе вы не сможете завершить регистрацию.
    4. Обязательно ознакомьтесь с правилами поведения на нашем форуме, чтобы избежать дальнейших конфликтов и непонимания.
    С уважением, администрация форума Old-Games.RU
    Скрыть объявление

Синглплеерное дополнение для Unreal - Another Reality

Тема в разделе "Мастерская", создана пользователем unreal doom, 7 июн 2008.

  1. unreal doom

    unreal doom

    Регистрация:
    1 мар 2006
    Сообщения:
    4.915
    AnotherRealityLogo2.jpg

    :hi: *:hi: *:hi:
    Итак уважаемые поклонники Unreal мы приглашаем всех желающих принять участие в создании Single Player дополнения для этой замечательной игры под названием Another Reality.

    Целью нашей работы является создание качественного, и притом максимально близкого по духу к оригинальному Unreal, дополнения. Вообще мы бы хотели видеть Another Reality, не просто творением на тему всем известного путешествия заключённого №849, но своеобразной компиляцией всех идей классического синглового Unreal, а это и предрелизные версии 95 и 97 годов, а также официальное дополнение Return to Na Pali. Естественно всё дополнение будет выдержано в стиле традиционной нереальной атмосферы.


    Всю подробную информацию, касающуюся Иной Реальности, вы можете узнать из тематической статьи на Old-Games Wiki. В том числе там можно посмотреть скриншоты и видео, скачать демо-версию кампании, а также узнать о наших дальнейших планах.
    (Выражаю благодарность @Dimouse за подготовку шаблона статьи и оказание помощи в ёё написании.)

    http://www.old-games.ru/wiki/Another_Reality

    Данная же тема пускай остаётся в качестве публичной страницы проекта. Местом для общения и обмена мнениями :).


    Автор идеи дополнения LipSheZ объявляет о старте проекта (2008 год)
     
    Последнее редактирование: 8 мар 2016
    Mr.Artur63, bl00dshot, bvedargh и 35 другим нравится это.
  2.  
  3. Masterkent

    Masterkent

    Регистрация:
    19 июл 2009
    Сообщения:
    315
    В нашем случае простого наследования недостаточно. Вот смотри: LesserBrute, MercenaryElite и SkaarjGunner (список можно продолжить, но мы для простоты рассмотрим только эти 3 вида) используют одну и ту же функцию для расчёта направления выстрела. Предположим, мы хотим изменить расчёт направления выстрела для LesserBrute. Тогда можно создать новый класс MyLesserBrute, непосредственно наследующийся от LesserBrute, и заместить в нём виртуальную функцию AdjustAim. Тут всё просто. А теперь представим, что нам надо подменить AdjustAim для всех трёх классов разом. Вот мы, значит, создали MyLesserBrute, MyMercenaryElite и MySkaarjGunner. И что дальше? Запихивать в каждый подкласс один и тот же код? Ну, ладно, в случае с функциями ещё можно как-то выкрутиться:

    class MyHelper extends Actor;
    Код:
    static function rotator AdjustAim(
        ScriptedPawn pawn, float projSpeed, vector projStart, int aimerror, bool leadTarget, bool warnTarget)
    {
        /* тут реализуем общий функционал */
    }
    class MyLesserBrute expands LesserBrute;
    Код:
    function rotator AdjustAim(
        float projSpeed, vector projStart, int aimerror, bool leadTarget, bool warnTarget)
    {
        return class'MyHelper'.static.AdjustAim(self, projSpeed, ProjStart, aimerror, leadTarget, warnTarget);
    }
    class MyMercenaryElite expands MercenaryElite;
    Код:
    function rotator AdjustAim(
        float projSpeed, vector projStart, int aimerror, bool leadTarget, bool warnTarget)
    {
        return class'MyHelper'.static.AdjustAim(self, projSpeed, ProjStart, aimerror, leadTarget, warnTarget);
    }
    и т.д.

    Хотя такое решение - тоже не сахар. Ну а с общими state-ами что делать? Тупо copy-paste-ить одно и то же в MyLesserBrute, MyMercenaryElite и MySkaarjGunner?

    Код:
    state StakeOut
    {
    ignores EnemyNotVisible; 
    
    	function TakeDamage( int Damage, Pawn instigatedBy, Vector hitlocation, 
    							Vector momentum, name damageType)
    	{
    		Global.TakeDamage(Damage, instigatedBy, hitlocation, momentum, damageType);
    		if ( health <= 0 )
    			return;
    		bFrustrated = true;
    		// LastSeenPos = Enemy.Location;                        // [-FIX_v1.7-]
    		if (Level.Game.Difficulty <= 3 || Enemy.Visibility > 0) // [-FIX_v1.7-]
    			LastSeenPos = Enemy.Location;                       // [-FIX_v1.7-]
    		if (NextState == 'TakeHit')
    		{
    			if (AttitudeTo(Enemy) == ATTITUDE_Fear)
    			{
    				NextState = 'Retreating';
    				NextLabel = 'Begin';
    			}
    			else
    			{
    				NextState = 'Attacking';
    				NextLabel = 'Begin';
    			}
    			GotoState('TakeHit'); 
    		}
    		else
    			GotoState('Attacking');
    	}
    
    	function HearNoise(float Loudness, Actor NoiseMaker)
    	{
    //----------------------------------[-FIX_v1.6-]-begin--------------------------
    		local float rnd;
    		local VoiceBox voice_box;
    		if (Level.Game.Difficulty > 3)
    		{
    			if (Enemy != NoiseMaker.instigator && SetEnemy(NoiseMaker.instigator) && NoiseMaker != Enemy)
    				return;
    			if (NoiseMaker == Enemy || NoiseMaker.IsA('FlashLightBeam'))
    			{
    				foreach AllActors(class'VoiceBox', voice_box)
    					if (voice_box.Owner == None && voice_box.Instigator != None)
    						Loudness -= VSize(Location - NoiseMaker.Location) / (100 + VSize(Location - voice_box.Location));
    
    				if (Loudness < 0)
    					return;
    
    				LastSeenPos = Enemy.Location;
    				rnd = FRand();
    				if (rnd < 0.3)
    					PlayAcquisitionSound();
    				else if (rnd < 0.6)
    					PlayThreateningSound();
    				bReadyToAttack = true;
    				DesiredRotation = Rotator(Enemy.Location - Location);
    				GotoState('Attacking');
    			}
    			return;
    		}
    //----------------------------------[-FIX-]-end---------------------------------
    		if ( SetEnemy(NoiseMaker.instigator) )
    			LastSeenPos = Enemy.Location; 
    	}
    
    	function SetFall()
    	{
    		NextState = 'StakeOut'; 
    		NextLabel = 'Begin';
    		NextAnim = AnimSequence;
    		GotoState('FallingState'); 
    	}
    
    	function bool SetEnemy(Pawn NewEnemy)
    	{
    		local float rnd;
    
    		if (Global.SetEnemy(NewEnemy))
    		{
    			rnd = FRand();
    			if (rnd < 0.3)
    				PlayAcquisitionSound();
    			else if (rnd < 0.6)
    				PlayThreateningSound();
    			bReadyToAttack = true;
    			DesiredRotation = Rotator(Enemy.Location - Location);
    			if (Level.Game.Difficulty > 3 && Enemy.Visibility == 0) // [-FIX_v1.9-]
    				DesiredRotation = Rotator(LastSeenPos - Location);  // [-FIX_v1.9-]
    			GotoState('Attacking');
    			return true;
    		}
    		return false;
    	} 
    	
    	function Timer()
    	{
    		bReadyToAttack = true;
    		Enable('Bump');
    		SetTimer(1.0, false);
    	}
    
    	function rotator AdjustAim(float projSpeed, vector projStart, int aimerror, bool leadTarget, bool warnTarget)
    	{
    		local rotator FireRotation;
    		local vector FireSpot;
    		local actor HitActor;
    		local vector HitLocation, HitNormal;
    
    		if (Level.Game.Difficulty > 3)                                                       // [-FIX_v1.6-]
    			return Global.AdjustAim(projSpeed, projStart, aimerror, leadTarget, warnTarget); // [-FIX_v1.6-]
    				
    		FireSpot = LastSeenPos;
    		aimerror = aimerror * (0.5 * (4 - skill - FRand()));	
    			 
    		HitActor = Trace(HitLocation, HitNormal, FireSpot, ProjStart, false);
    		if( HitActor != None ) 
    		{
    			////log("adjust aim up");
     			FireSpot.Z += 0.9 * Target.CollisionHeight;
     			HitActor = Trace(HitLocation, HitNormal, FireSpot, ProjStart, false);
    			bClearShot = (HitActor == None);
    		}
    		
    		FireRotation = Rotator(FireSpot - ProjStart);
    			 
    		FireRotation.Yaw = FireRotation.Yaw + 0.5 * (Rand(2 * aimerror) - aimerror);
    		viewRotation = FireRotation;			
    		return FireRotation;
    	}
    		
    	function BeginState()
    	{
    		Acceleration = vect(0,0,0);
    		bCanJump = false;
    		bClearShot = true;
    		bReadyToAttack = true;
    		SetAlertness(0.5);
    	}
    
    	function EndState()
    	{
    		if ( JumpZ > 0 )
    			bCanJump = true;
    	}
    
    Begin:
    	Acceleration = vect(0,0,0);
    	PlayChallenge();
    	TurnTo(LastSeenPos);
    	if ( bHasRangedAttack && bClearShot && (FRand() < 0.5) && (VSize(Enemy.Location - LastSeenPos) < 150) && CanStakeOut() )
    		PlayRangedAttack();
    KeepStakingOut: // [-FIX_v1.1-]
    	FinishAnim();
    	PlayChallenge();
    	if ( bCrouching && !Region.Zone.bWaterZone )
    		Sleep(1);
    	bCrouching = false;
    	Sleep(1 + FRand());
    //----------------------------------[-FIX_v1.1-]-begin--------------------------
        if (Level.Game.Difficulty > 3 && Enemy != None && Enemy.Visibility == 0) // [-FIX_v1.2-]
    	{
    		if (Physics == PHYS_Flying || Physics == PHYS_Swimming)
    			Acceleration = -0.1 * Velocity;
    		PlayChallenge();
    		Goto('KeepStakingOut');
    	}
    //----------------------------------[-FIX-]-end---------------------------------
    	if ( !bHasRangedAttack || !bClearShot || (VSize(Enemy.Location - Location) 
    				> 350 + (FRand() * RelativeStrength(Enemy) - CombatStyle) * 350) )
    		GotoState('Hunting', 'AfterFall');
    	else if ( CanStakeOut() )
    		Goto('Begin');
    	else
    		GotoState('Hunting', 'AfterFall');
    }
    (и таких вот state-ов несколько). Ты прикидываешь, какой это геморрой получится?

    Единственное альтернативное решение, которое я вижу, - это дублирование всей иерархии начиная с Pawn, что опять же трудно назвать верхом простоты и изящества.
     
    Последнее редактирование: 23 янв 2013
    DENTNT, ArchGrey, Alien3674 и ещё 1-му нравится это.
  4. unreal doom

    unreal doom

    Регистрация:
    1 мар 2006
    Сообщения:
    4.915
    И вновь я интересуюсь положением дел остальных участников команды.

    Ибо ситуация на мой взгляд сейчас опять обстоит не лучшим, образом, и самая неприятная её часть - затишье и неизвестность :(.
    Ну ладно, положим насчет последнего я загнул. Мне известно, что, помимо меня, своей картой, не спеша, занимается также и SkaarjZR. Тем временем ArchGrey продолжает расширять и детализировать сюжет и устройство мира Another Reality. Касательно King89 я ничего не знаю :(. И еще я извиняюсь, что забыл, какую конкретно задачу сейчас решает
    Alien3674.
    Но, как бы то ни было, меня заметно тревожит настолько затянувшийся простой с картами. Я сейчас не призываю срочно хвататься за голову и что-то менять. НО! Задуматься на эту тему определенно стоит.

    Создание уровней есть костяк всей работы, а мы уже довольно часто обсуждаем между собой задачи, на данном этапе, имеющие второстепенную важность, и порой даже совсем незначительные.
     
    ArchGrey нравится это.
  5. Alien3674

    Alien3674

    Регистрация:
    1 июл 2011
    Сообщения:
    471
    Приехали... я продолжаю обновление Another.u...
    Ты мне так и не ответил на последнее сообщение в ЛС.
     
    unreal doom нравится это.
  6. ArchGrey

    ArchGrey

    Регистрация:
    22 июн 2009
    Сообщения:
    117
    Я тут жива пока, если что =) И спасибо за упоминание, Дум)

    Кстати, кроме того, я потихонечку вношу правки в локализацию Unreal на OldUnreal Wiki, вместе со SkaarjZR - хотя это конкретно к AR не относится, но так, для информации.
     
    unreal doom и Alien3674 нравится это.
  7. unreal doom

    unreal doom

    Регистрация:
    1 мар 2006
    Сообщения:
    4.915
    Тоже весьма благое дело :good:.

    И все же мне хочется вновь услышать о планах King89 и Alien3674 относительно картостроительства.
     
    Последнее редактирование: 18 мар 2013
  8. Alien3674

    Alien3674

    Регистрация:
    1 июл 2011
    Сообщения:
    471
    unreal doom, вопрос относительно карт уже обсуждался, неоднократно. Я не отказываюсь, но боюсь, результат тебя не обрадует.
     
    Последнее редактирование модератором: 18 мар 2013
  9. unreal doom

    unreal doom

    Регистрация:
    1 мар 2006
    Сообщения:
    4.915
    Alien3674 По моему, в этом деле главное начать :). Я давал добро на доработку воздуховодов 8 уровня :yes:, еще центр связи например уже имеет вполне четкий образ (Если что в ЛС уточним, там Грэй уже высказывала мне свои идеи относительно этого вопроса и также мы беседовали на тему "подсобных помещений").
     
  10. Alien3674

    Alien3674

    Регистрация:
    1 июл 2011
    Сообщения:
    471
    unreal doom, воздуховоды 8-го уровня у меня получились в два раза больше :whistling:.
    Давай я пока закончу с обновлением Another.u, ну а потом видно будет.
     
    unreal doom нравится это.
  11. unreal doom

    unreal doom

    Регистрация:
    1 мар 2006
    Сообщения:
    4.915
    Само собой :).
    Уточню, что я все это время имел в виду как раз доработку того, что уже было построено мной. Кстати эти воздуховоды ровно год назад были созданы :shok:.
     
  12. ArchGrey

    ArchGrey

    Регистрация:
    22 июн 2009
    Сообщения:
    117
    Да, да, давайте, ура. Я имею в виду, возобновление совместной работы по Базе Наемников - очень не терпится узреть реализованным то, что напланировано))
     
  13. Alien3674

    Alien3674

    Регистрация:
    1 июл 2011
    Сообщения:
    471
    Я же говорил, что результат тебя не обрадует :spiteful:. Да и можно было уточнить :blum:, в любом случае я отказался от этой затеи...

    ArchGrey, а что-то ещё напланированно?
     
  14. ArchGrey

    ArchGrey

    Регистрация:
    22 июн 2009
    Сообщения:
    117
    Alien3674, ой, да.... Там много чего, если вы еще не видели результатов наших последних обсуждений и трудов с Думом... :blush: Рисованную схему всего уровня не видели?
     
  15. Necrasow

    Necrasow

    Регистрация:
    12 фев 2013
    Сообщения:
    1
    Очень интересно, зарегистрировался на форуме только ради этой темы. Готов помочь, чем смогу: Unreal Editor толком не знаю, возможно пригожусь, как 3D-шник и дизайнер (как перегонять труды в Unreal Editor без понятия).
    По возможности сяду его учить, первую версию
     
    Alien3674, unreal doom, ArchGrey и ещё 1-му нравится это.
  16. ArchGrey

    ArchGrey

    Регистрация:
    22 июн 2009
    Сообщения:
    117
    Necrasow,
    Ух ты, здорово. Так приятно слышать!

    Ждем unreal doom, ему тоже очень приятно будет, я думаю)
     
  17. unreal doom

    unreal doom

    Регистрация:
    1 мар 2006
    Сообщения:
    4.915
    Necrasow приветствую вас в нашем уютном закутке :hi:!

    Разумеется я очень рад всем людям предлагающим свою помощь, в создании такого дополнения для Unreal, каким задумывается Another Reality. И для начала я предлагаю вам ознакомиться с Beta-Demo нашей одиночной кампании (шапку темы полагаю вы читали), чтобы составить более точное представление о том, что было нами задумано (ссылки все в той же шапке).

    Также я весьма рад, что вы, владея более совершенными 3D редакторами, готовы вместе с тем изучать и UnrealED старой версии :ok:.
    Сам я другими редакторами не владею, но за время разработки AR был свидетелем минимум двух противоположных случаев связанных с этой темой.
    Двое весьма почтенных знатоков, в целом около двух лет пытались переносить результаты работы в 3DSMax на рельсы Unreal Engine 1, и к огромному сожалению, у них так ничего не вышло.
    С другой стороны один из наших теперешних разработчиков, и тоже знаток Анрила, достаточно успешно строит уровень в Blender'е. Единственное замечу, что я пока его работ так и не видел, но особых сомнений в истинности его слов не имею.
    Ладно, мне они и в существующем варианте нравятся ;), потому для меня тут ничего печального нет.
    В любом случае, жду окончания твоей работы над пакетом Another.u, и потом уже вернемся к теме с универсальным комплексом.

    Надеюсь ArchGrey нетрудно будет переслать тебе в ЛС нашу с ней переписку и её новые идеи относительно 8-го уровня :rolleyes:.

    Теперь бы очень хотелось прочесть мнение King89 относительно сложившейся ситуации с темпами построения новых карт :yes:.
     
  18. ArchGrey

    ArchGrey

    Регистрация:
    22 июн 2009
    Сообщения:
    117
    О, хорошо, в ближайшее время я это сделаю. (надеюсь, все сообщения сохранились)
     
    Alien3674 и unreal doom нравится это.
  19. DENTNT

    DENTNT

    Регистрация:
    7 июн 2009
    Сообщения:
    184
    зачем так новичков пугать, это всеголиш поверхностное мнение..)) а вот на взгляд тех кто экспортировал модели (БСП и меши), все совсем иначе, все получилось, но увидели на сколь убог и отстал первый движек, с остальными то как по маслу..
    и заметьте, никакие милки и блендеры не помогут! только возня, возня и еще много много возни, а так, все экспортится, но нерентабельно, задумка vs времязатраты.. :yes:
     
    Bato-San и Alien3674 нравится это.
  20. unreal doom

    unreal doom

    Регистрация:
    1 мар 2006
    Сообщения:
    4.915
    Что у вас получилось, когда вы конвертировали геометрию? Все прошло удачно без дыр и ошибок? Просто напросто комп не повис от этих операций? Или вы смогли повысить детализацию до уровня UT 2004?
    Хотя это предложение намекает на третий вариант.

    По моему в этом деле есть один, очень простой и понятный критерий. Задача считается выполненной, когда анриловский уровень, созданный в стороннем 3D редакторе, получается не хуже, чем в UnrealED :).
     
  21. Bato-San Чеширский волк-киборг

    Bato-San

    Регистрация:
    24 июн 2010
    Сообщения:
    14.136
    Задача считается выполненной, когда результат получается хотя бы не хуже (не только по техническим критериям), чем в оригинальном Unreal. Если уж совсем по сути. А в чём он там делается при таком условии - дело десятое. Был бы мастер - мастер.:yes:
     
  22. unreal doom

    unreal doom

    Регистрация:
    1 мар 2006
    Сообщения:
    4.915
    Хотел так написать, но подумал, что Ден обязательно сосредоточит тогда внимание на недостатках UnrealED, заявив, что и на нем не сделать Unreal.
    Кстати, такое утверждение вполне может иметь основание, когда оглядываешься на уровни с природными ландшафтами. В любом случае, Эпики могли в любой момент разработки совмещать UED еще с чем-то.
     
  1. На этом сайте используются файлы cookie, чтобы персонализировать содержимое, хранить Ваши предпочтения и держать Вас авторизованным в системе, если Вы зарегистрировались.
    Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie.
    Скрыть объявление