23011
92
Сегодня исполняется 10 лет с момента выхода S.T.A.L.K.E.R.: Тень Чернобыля
20 марта 2007 года вышел S.T.A.L.K.E.R.: Тень Чернобыля (в США и Канаде, и 23 марта в Европе и СНГ), ранее известный как S.T.A.L.K.E.R.: Oblivion Lost. Игра разошлась тиражом более 950 тысяч копий на территории СНГ и 700 тысяч на Западе и выиграла множество наград. Разработка игры началась в 2001 году и продолжалась на протяжении почти семи лет. За это время игра трижды меняла название и концепцию. Во время разработки и после выхода игры в сеть утекло множество предварительных сборок, что дало начало моддингу который продолжается до сих пор.
Поздравляем всех сталкеров и обычных прохожих с этим событием!
К десятилетию выхода игры на форум добавлен скин в стиле игры. Выбрать его можно в нижнем-левом углу форума:
p.p.s. для раздела "Бар Тайны Зоны" на пробу включил новый скин для всех.
Отличный скин!
БИЛД! БИЛД! БИЛД!
Единственное что, вроде 23го же числа игра вышла.
З.Ы. Скин возвращает 2007, спасибо.
Жду анонса второй части, пора бы
20 числа в США и Канаде (эта дата считается официальной датой выхода игры), 23 - в Европе и СНГ.
В какой-то степени S.T.A.L.K.E.R.: Shadow of Chernobyl способна расширить кругозор людям не знакомым с игрой
т.е какой-то абстрактный чел игравший только в какие-то фентези и т.д однажды пройда ТЧ на минуточку прифигеет...
для нас проженных фанатов это все уже должное, но думающий игрок со стороны будет в некой приятной оздаченности...
Всё слышали о Чернобыле, но не все представляют себе, что там вообще в Зоне этой есть...
Это игра, где ты пробираешся сквозь обломки взорвавшегося реактора, чтобы исполнить желание у монолита
Это игра, где огромнаяя военная антенна используется, чтобы замбировать окружающийх..
Это игра, где люди говорящие на одном языке деляться на военезированные группировки, чтобы получить больше влияния для распростронения своей идеалогии
Это игра, которая заставляет параноить в процессе прохождения и вырасти над своими предрассудками в истинном финале игры
Это игра в чёрном облочение, которая стоит рядом на равне стакими мистически играми говорящими игроку какуе-то странную истину, о которой он не подозревал....игры, где игрок то и дело вживается в роль запрограммированного сталкера с татуировкой, воставшего из символического-загробного грузовика смерти, то в другой игре такого толка захватывает самолёт находясь под гипнозом,находясь под влиянием фразой активирующий спящего агента, которая приврдит его в подводный город, в другой очень известной игре становится какой-то куклой в руках загадочного оператора G-man т.д и т.п
S.T.A.L.K.E.R.
музыка к игре и катсцены
Интервью с MoozE (композитор OST S.T.A.L.K.E.R.)
У меня такой вопрос. Известно ли что-то о тираже игры? Данные в сети есть только за 2008 год, к сожалению...
А ещё есть физические копии без Стима и всякие там GOG.
Мои поздравления всем кто хоть раз повстречался с Сидором.Удачи вам по жизни!!!
За скин отдельное спасибо, отличный! Конечно 23-е число нам более роднее, но это даже хорошо что имеем возможность отмечать и поздравляться не один раз.
Игра всё также интересна и таинственна, при нечастом прохождении, и всё также остаётся ощущение, что вот-вот выплывет очередная знаковая сборка, по коей обнаружится что-то новое запрятанное разрабами, доселе не попадавшееся.
В начале, первые полгода - год, игралось тяжко: тогда видюха была древняя совсем (GF 4200), калашей в руках не было видно, двери открывались вверх, во время дождя всё небо светилось разными цветами... Пришлось тотальный апгрейд компа проводить (докинул памяти, потом поменял видюху, а потом вообще собрал новый системник)...
Самое удивительное - игра ничуть не постарела. Временами надоедала, но модификации её каждый раз возвращают к жизни!
Мн кажется, если бы сейчас выпустили вторую часть, с нормальным двиглом - разработчики срубили бы круглую сумму!
Все таки, наверное 70% обсуждений на форуме о сталкере и около него темах)))
Об игре узнал впервые из номера Игромании, потом в году эдак 2004-м брат достал диск со старым билдом 1114. Я, говорит, сталкер принёс. Вставляем диск, а там readme и гласит нечто в духе "...уважаемый юзер, это альфа-версия игры...". Облом.
Отдельного абзаца достойны все скандалы-интриги-расследования по части игры здесь на форуме, воистину уникальный во всех отношениях проект.
А что у нас сегодня какие ни будь праздничные мероприятия будут? Ну там типа салют, шампанское))
Посмотрел самые первые файлы по этой игре на своём компе вроде февраль 2008 года.
Саму игру взял у дв. брата, копию оригинала 1.0000 с патчами до 1.0002 и НоДВД, первый раз тупил постоянно, во второй раз в схрон Стрелка на встречу с Доктором не пошёл, и стало быть играл ложную концовку, "дай мне денег" или "хочу что бы Зона исчезла", другие концовки не появлялись из-за бага в скриптах. Там не правильно рассчитывалась репа, а именно репутация используется для расчёта типа концовки, если денег меньше 50000 и не убиты оба лидера Свободы и Долга.
ЗЫ
Ещё скажу, сама игра не особо сложная, не так давно решил пройти Far Cry, дак меня тут же раз за разом убивали, если сделать такую уровень сложности как в этой игре играть будет сложно, а именно научить НПС стрелять на упреждение, и снизить уровень защиты ГГ и всё, будет вам аля FarCry, по кустам будешь шарится.
Прошло 10 лет, а играмдо сих пор у меня в душе.
Вообще писал когда-то в каком-то опросе о том, как познакомился со сталком, а точнее, в каком году.
Так вот:
Ну а там... уже не скажу когда, но через некоторое время после релиза, купил диск, то был:
М-да... эт был тот ещё забег. Комп игру совсем не тянул, были минималки ток. И то, большие уровни (типа радара и припяти, не говоря уж о ЧАЭС) пробегалась смотря в землю.
Потом конечно достал лицуху...
Насколько я помню, купил пиратку в день релиза, хотя позже загляну в коробку, может быть, чек остался. Но ещё задолго до релиза один мой друг по мере поступления новостей тут же рассказывал их мне. Да, он очень её ждал. У меня тоже интерес был, но не такой бешеный. Мне игра понравилась, бесспорно, но сколько раз прошёл её не помню. Модами, кстати, не баловался, ставил какие-то, но что-то по мелочи. А вот сейчас, в эти минуты, прям ностальгия пробила... Поиграть бы, да уже особо не до этого...
P.S. Может мафию замутим в честь праздника?
Вот играем восторгаемся графикой,атмосферой и где то через 2 часа понимаю,что мы на Дх 8 сидим На девятый переключились и комп попал в аномальную дыру слабой производительности.
Всех поздравляю с десятилеткой.
Сталкер только на статике и вроде как 1024х768 на 1440х900 мониторе - с билдовской растяжкой.
Ещё жёсткий диск на 160 гигов был форматирован в FAT32 и столкир безудержно зависал после продолжительной игры, аж каждые 10 минут. Причём, стоило поиграть в крузис как зависания в сталкере исчезали часов на 5 - наверняка дело в файле подкачки.
Вылеты с зелёным жуком проскакивали один раз на 100 зависаний из-за файловой системы (и это на первом патче). Но это не останавливало меня и папаню - продолжали рубиться. Папан вообще в сингловые игры со времён HL2 не играл, а в сталкера сильно завис. Не знаю, как он осилил ЧН на третьем патче, а ЗП вообще не понравился - вышел через 10 минут.
Надо видос запилить по поводу десятилетия.
Ну комп новый, а вот ценник... как-то дороговато за сие железо)
Яндекс показал с одного сайта (трилогии тоже 10 лет, так что актуально): "Получить стабильные 60 FPS на максимальных настройках я смог лишь пройдя целый цикл видеокарт: GeForce 8800 GT, GeForce GT 240, Radeon HD 7750, GeForce GTX 670 и GeForce GTX 1060. Только последняя смогла обеспечить стабильный уровень производительности, да и то в 1366х768. " Что же за игра такая, кто угадает?
PS: Эхх, а X-18 при первом прохождении... такие эмоции были в этой же лабе (именно локации, а не индекса в названии) только в OLR и LA. А этот страшный скрежет застрявших ящиков.
Тень Чернобыля вроде как нормально идет.
ща читаю 4pda коменты к новости и угораю, что некоторые считают Сталка аналогом фоллаута))))
А сможешь восстановить? Тогда на тебе подарок в честь юбилея!
У меня так и не получилось, залезать в вертушку можно, но летит куда попало, кувыркается, короче отстой.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "Flyer.h"
#include "../CameraLook.h"
#include "CameraFirstEye.h"
#include "../environment.h"
#include "../skeletoncustom.h"
#define FLY_ACCEL 10.0f
#define YAW_ACCEL 0.75f
#define RUN_COEF 4.0f
#define MAX_CAM_YAW 1.75f
#define FRICTION_AIR 1.75f
#define FRICTION_WALL 5.f
#define FRICTION_GROUND 10.f
//#define AIR_RESIST (1.f-0.01f)
#define MIN_CRASH_SPEED 15.f
#define MAX_CRASH_SPEED 30.f
IC float sign(float t) { return (t>=0)?1.f:-1.f; }
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CFlyer::CFlyer() : inherited()
{
m_PhysicMovementControl->SetCrashSpeeds (MIN_CRASH_SPEED,MAX_CRASH_SPEED);
m_PhysicMovementControl->SetParent (this);
m_PhysicMovementControl->SetMass (2000);
m_PhysicMovementControl->SetApplyGravity(FALSE);
m_PhysicMovementControl->SetFriction (FRICTION_AIR,FRICTION_WALL,FRICTION_GROUND);
cameras[efcFrontView] = xr_new<CCameraFirstEye> (this, pSettings, "heli_front_cam", true);
cameras[efcLookAt] = xr_new<CCameraLook> (this, pSettings, "heli_look_cam", false);
cameras[efcFreeLook] = xr_new<CCameraLook> (this, pSettings, "heli_free_cam", false);
cam_active = efcFrontView;
eState = fsWork;
new_mstate = 0;
cur_mstate = 0;
mYaw = 0;
mYawVelocity= 0;
// vOldVel.set(0,0,0);
// Device.seqRender.Add (this);
}
CFlyer::~CFlyer()
{
// Device.seqRender.Remove (this);
for (int i=0; i<efcMaxCam; ++i) xr_delete(cameras[i]);
}
void CFlyer::Load(LPCSTR section)
{
Msg("Loading flyer: %s",section);
inherited::Load(ini,section);
Fbox aabb;
aabb.set (CFORM()->GetBBox());
// m_PhysicMovementControl->SetBox (aabb);
Fvector vfC,vfE;
vfE.set (1.f,.25f,1.f);
vfC.set (0.f,.2f,0.f);
m_PhysicMovementControl->SetFoots (vfC,vfE);
m_PhysicMovementControl->CalcMaximumVelocity(mMaxAirVelocity,FLY_ACCEL*RUN_COEF,FRICTION_AIR);
m_PhysicMovementControl->CalcMaximumVelocity(mMaxYawVelocity,YAW_ACCEL*RUN_COEF,FRICTION_AIR);
// R_ASSERT (Visual()->Type==MT_SKELETON);
// smart_cast<CKinematics*> (Visual())->PlayCycle("work");
}
void CFlyer::UpdateState(){
// проверить живой или нет
eState = (1)?fsWork:fsDead;
}
void CFlyer::CheckControls(Fvector &vControlAccel, float& fYawAccel)
{
// control accel
vControlAccel.set(0,0,0);
fYawAccel = 0;
// update player accel
if (cur_mstate&mcUp) vControlAccel.y = 1;
if (cur_mstate&mcDown) vControlAccel.y = -1;
if (cur_mstate&mcFwd) vControlAccel.z = 1;
if (cur_mstate&mcBack) vControlAccel.z = -1;
if (cur_mstate&mcLStrafe) vControlAccel.x = -1;
if (cur_mstate&mcRStrafe) vControlAccel.x = 1;
if (cur_mstate&mcLeft) fYawAccel = -1;
if (cur_mstate&mcRight) fYawAccel = 1;
if ((cam_active==efcFrontView)&&(fYawAccel==0)){
CCameraBase* cam = cameras[efcFrontView];
float val = cam->CheckLimYaw();
float sgn = sign(val);
if ((val>-.05f)&&(val<0.05f)) val = 0;
fYawAccel = val;//sgn*val*val;
}
// fMouseYawMoving *= 0.8f;
vControlAccel.normalize_safe();
vControlAccel.mul (FLY_ACCEL);
fYawAccel *= YAW_ACCEL;
if (isAccelerated()) {
vControlAccel.mul (RUN_COEF);
fYawAccel *= RUN_COEF;
}
if (m_PhysicMovementControl->Environment()==CMovementControl::peOnGround){
vControlAccel.x*=0.1f;
vControlAccel.z*=0.1f;
fYawAccel*=0.1f;
}
vControlAccel.y *= 0.75f;
//if (_abs(vControlAccel.y)>EPS_L) vControlAccel.y -= psGravity*.25f;
}
void CFlyer::SetAnimation( )
{
}
#define BANK_FACTOR 1.25f
void CFlyer::Update(u32 DT)
{
if (!bEnabled) return;
float dt = float(DT)/1000.f;
// enabled & disabled motion state on current frame
cur_mstate = new_mstate;
// update controls
Fvector vControlAccel;
float fYawAccel;
CheckControls (vControlAccel,fYawAccel);
// prepare safe translate object
Fvector accel;
/*
switch(m_PhysicMovementControl->Environment())
{
case CMovementControl::peInAir: pApp->pFont->Out(-1.f,0.5f,"Env: air"); break;
case CMovementControl::peAtWall: pApp->pFont->Out(-1.f,0.5f,"Env: wall"); break;
case CMovementControl::peOnGround: pApp->pFont->Out(-1.f,0.5f,"Env: ground"); break;
default: NODEFAULT;
}
*/
// rotation
mYaw = mYaw + mYawVelocity*dt + fYawAccel*dt*dt*0.5f;
mYawVelocity = mYawVelocity + fYawAccel*dt;
mYawVelocity -= dt*mYawVelocity*m_PhysicMovementControl->GetCurrentFriction();
Fvector D,N;
D.set(_sin(mYaw),0.f,_cos(mYaw));
N.set(0,1,0);
mRotate.rotation(D,N);
// movement
mRotate.transform_dir(accel, vControlAccel);
m_PhysicMovementControl->SetPosition(Position());
m_PhysicMovementControl->Calculate (accel,mYawVelocity,0,dt,false);
m_PhysicMovementControl->GetPosition(Position());
//---------------------------------------------------------
// рассчитаем крен
//---------------------------------------------------------
const Fvector& VM = m_PhysicMovementControl->GetVelocity();
Fvector V;
// V.set (vOldVel);
// V.inertion (VM,0.999f);
// vOldVel.set (VM);
Fmatrix M;
M.transpose (mRotate);
M.transform_dir(V,VM);
// pApp->pFont->Out(-1,0.8f,"Vel: %.2f, %.2f, %.2f",V.x,V.y,V.z);
// рассчитаем возможный крен по скорости
V.div (mMaxAirVelocity*2.f*BANK_FACTOR);
Fmatrix Rbank;
Fquaternion Q;
// рассчитаем крен по повороту
float bank = mYawVelocity/(mMaxYawVelocity*BANK_FACTOR);
bank*=_abs (V.z*4.f);
bank+=V.x;
// повернем модель
Q.rotationYawPitchRoll(bank,0,-(V.z));
Rbank.rotation (Q);
mRotate.mulB_43 (Rbank);
// crop yaw angle
if (mYaw>PI_MUL_2){
mYaw-=PI_MUL_2;
cameras[efcLookAt]->yaw-=PI_MUL_2;
}
if (mYaw<-PI_MUL_2){
mYaw+=PI_MUL_2;
cameras[efcLookAt]->yaw+=PI_MUL_2;
}
// look camera delay computing
float vm = V.magnitude()*BANK_FACTOR*2; clamp(vm,0.f,1.f);
{
float Yo, k, Ay, z, f;
Yo = cameras[efcLookAt]->yaw;
z = 1.6f;
f = 1.2f+vm;
k = PI_MUL_2*f;
Ay = (mYaw-Yo)*k*k - Vy*k*z;
cameras[efcLookAt]->yaw = Yo + Vy*dt + Ay*dt*dt*0.5f;
Vy = 0.99f*Vy + Ay*dt;
}
//---------------------------------------------------------
// test nearest object
// Fvector C; float R;
// m_PhysicMovementControl->GetBoundingSphere(C,R);
// g_pGameLevel->ObjectSpace.TestNearestObject(CFORM(), C, R);
// check state
UpdateState ();
// Check ground-contact
if (m_PhysicMovementControl->gcontact_Was) {
}
// update motions
SetAnimation ();
UpdateTransform ();
// smart_cast<CKinematics*>(Visual())->Update();
inherited::Update (DT);
if (IsMyCamera()) UpdateCamera();
// HUD update
// pApp->pFont->Out(-1,0.88f,"Fly P: %.3f, %.3f, %.3f",Position().x,Position().y,Position().z);
// pApp->pFont->Out(-1,0.93f,"Fly D: %.3f, %.3f, %.3f",mRotate.k.x,mRotate.k.y,mRotate.k.z);
}
#ifdef DEBUG
void CFlyer::OnRender ()
{
if (!bDebug) return;
m_PhysicMovementControl->dbg_Draw ();
}
#endif
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_FLYER_H__06360CF2_1B3F_4F82_814D_F7BF5E4F601C__INCLUDED_)
#define AFX_FLYER_H__06360CF2_1B3F_4F82_814D_F7BF5E4F601C__INCLUDED_
#pragma once
#include "entity.h"
#include "actor_flags.h"
// refs
class CCameraBase;
class CFlyer : public CEntity
{
enum EMoveCommand{
mcFwd = 0x0001,
mcBack = 0x0002,
mcLStrafe = 0x0004,
mcRStrafe = 0x0008,
mcUp = 0x0010,
mcDown = 0x0020,
mcAccel = 0x0100,
mcLeft = 0x0200,
mcRight = 0x0400
};
enum EFlyerCameras {
efcFrontView = 0,
efcLookAt,
efcFreeLook,
efcMaxCam
};
enum EFlyerState{
fsWork,
fsDead
};
private:
typedef CEntity inherited;
private:
// State machine
EFlyerState eState; // +644
u32 new_mstate, cur_mstate; // +648, +652
float mYaw; // +656
float mYawVelocity; // +660
float mMaxYawVelocity; // +664
float mMaxAirVelocity; // +668
IC BOOL isAccelerated () {
if (cur_mstate&mcAccel) return psActorFlags.test(AF_ALWAYSRUN)?FALSE:TRUE;
else return psActorFlags.test(AF_ALWAYSRUN)?TRUE :FALSE;
}
// Cameras
CCameraBase* cameras[efcMaxCam]; // +672
EFlyerCameras cam_active; // +684
void ChangeCamStyle (EFlyerCameras style);
void UpdateState ();
void UpdateCamera ();
void SetAnimation ();
void CheckControls (Fvector &vControlAccel, float& fYawAccel);
public:
CFlyer ();
virtual ~CFlyer ();
virtual void Load (LPCSTR section);
// Fire control
virtual void g_fireParams (const CHudItem* /**pHudItem/**/, Fvector& /**P/**/, Fvector& /**D/**/) {};
virtual void HitSignal ( int /**iHitAmount/**/, Fvector& /**vLocalDir/**/, CEntity* /**E/**/, s16 /**element/**/){;}
virtual void Update ( u32 DT );
virtual void IR_onMouseMove (int x, int y);
virtual void IR_OnKeyboardPress (int dik);
virtual void IR_OnKeyboardRelease (int dik);
virtual void IR_OnKeyboardHold (int dik);
#ifdef DEBUG
virtual void OnRender ();
#endif
};
#endif // !defined(AFX_FLYER_H__06360CF2_1B3F_4F82_814D_F7BF5E4F601C__INCLUDED_)
#include "Flyer.h"
#include "../CameraBase.h"
void CFlyer::UpdateCamera()
{
Fvector point, dangle;
// get calc eye point 90% from player height
Fvector R;
m_PhysicMovementControl->Box().getsize (R);
point.set (0.f,R.y*0.55f,0.9f);
XFORM().transform_tiny (point);
dangle.set(0,0,0);
switch (cam_active){
case efcFrontView: break;
case efcLookAt: break;
case efcFreeLook: break;
default: NODEFAULT;
}
CCameraBase* C = cameras[cam_active];
C->Update (point,dangle);
g_pGameLevel->Cameras().Update (C);
}
void CFlyer::ChangeCamStyle (EFlyerCameras style){
CCameraBase* old_cam = cameras[cam_active];
cam_active = style;
CCameraBase* new_cam = cameras[cam_active];
old_cam->onDeactivate();
new_cam->onActivate(old_cam);
switch(cam_active){
case efcFrontView: bVisible = true; new_cam->yaw=0; break;
case efcLookAt: bVisible = true; break;
case efcFreeLook: bVisible = true; break;
}
}
#include "flyer.h"
#include "../xr_input.h"
#include "../CameraBase.h"
void CFlyer::IR_OnKeyboardPress(int cmd){
if (eState==fsDead) return;
switch(cmd){
case kACCEL: new_mstate |= mcAccel; break;
case kR_STRAFE: new_mstate |= mcRStrafe; break;
case kL_STRAFE: new_mstate |= mcLStrafe; break;
case kFWD: new_mstate |= mcFwd; break;
case kBACK: new_mstate |= mcBack; break;
case kJUMP: new_mstate |= mcUp; break;
case kCROUCH: new_mstate |= mcDown; break;
case kLEFT: new_mstate |= mcLeft; break;
case kRIGHT: new_mstate |= mcRight; break;
// case kFIRE: FireStart(); break;
case kCAM_1: ChangeCamStyle(efcFrontView);break;
case kCAM_2: ChangeCamStyle(efcLookAt); break;
case kCAM_3: ChangeCamStyle(efcFreeLook);break;
}
}
void CFlyer::IR_OnKeyboardRelease(int cmd){
switch(cmd){
case kACCEL: new_mstate &=~mcAccel; break;
case kR_STRAFE: new_mstate &=~mcRStrafe; break;
case kL_STRAFE: new_mstate &=~mcLStrafe; break;
case kFWD: new_mstate &=~mcFwd; break;
case kBACK: new_mstate &=~mcBack; break;
case kJUMP: new_mstate &=~mcUp; break;
case kCROUCH: new_mstate &=~mcDown; break;
case kLEFT: new_mstate &=~mcLeft; break;
case kRIGHT: new_mstate &=~mcRight; break;
// case kFIRE: FireEnd(); break;
}
}
void CFlyer::IR_OnKeyboardHold(int cmd){
if (eState==fsDead) return;
switch(cmd){
case kCAM_ZOOM_IN:
case kCAM_ZOOM_OUT:
case kUP:
case kDOWN:
cameras[cam_active]->Move(cmd);
break;
case kLEFT:
case kRIGHT:
// if (cam_active==efcFreeLook)
// cameras[cam_active]->Move(cmd);
break;
}
}
void CFlyer::IR_onMouseMove(int dx, int dy)
{
float scale = psMouseSens * psMouseSensScale/50.f;
if (efcLookAt!=cam_active)
if (dx){
float d = float(dx)*scale;
cameras[cam_active]->Move((d<0)?kLEFT:kRIGHT, _abs(d));
// fMouseYawMoving = 1.f;
}
if (dy){
float d = ((psMouseInvert.test(1))?-1:1)*float(dy)*scale*MouseHWScale;
cameras[cam_active]->Move((d>0)?kUP:kDOWN, _abs(d));
}
}
В этот вертолёт не залезают, а переключают управление на него, короче, этот код относится приблизительно к
ЗЫ
В билде 1098 этот вертолёт не работает, отключён. Я так же пытался его реанимировать, но получилось не очень.
все понял откуда файлы, там и вертолет нормальный есть но нифига не реализовано
А игра версии 1.0 у меня так вообще тогда чуть не спалила мою 7600GS
да ладно, в то время был ужасный dual-up по карточкам(и то в конце 2007-го), дальше уж не буду писать - что это значило, по кр.мере для отдельных ю-зверей.
Вообще имхо: грех гонять тч с модами, и зачем из ТЧ пытаюца сделать ЗП, грешно это.