Posts for feos

1 2 230 231 232 455 456
Experienced Forum User, Published Author, Site Admin, Skilled player (1225)
Joined: 4/17/2010
Posts: 11704
Location: Lake Char­gogg­a­gogg­man­chaugg­a­gogg­chau­bun­a­gung­a­maugg
Вощем так как за экраном видно врага начиная с первых версий скрипта (пофиксил низ), а считать мелкие сердески вместе с нормальными айтемами слишком мозголомно, счетчики такие: спавн, враги, айтемы, сердечки. Тести.
Warning: When making decisions, I try to collect as much data as possible before actually deciding. I try to abstract away and see the principles behind real world events and people's opinions. I try to generalize them and turn into something clear and reusable. I hate depending on unpredictable and having to make lottery guesses. Any problem can be solved by systems thinking and acting.
Experienced Forum User, Published Author, Site Admin, Skilled player (1225)
Joined: 4/17/2010
Posts: 11704
Location: Lake Char­gogg­a­gogg­man­chaugg­a­gogg­chau­bun­a­gung­a­maugg
Archanfel wrote:
Для летательного уровня, пожалуй больше ничего и нет.
Какой смысл считать ракеты и дронов, если у них и так показывается удаленность, когда они за экраном, а на экране их и так видно?
Archanfel wrote:
Но, если распространить концепцию вторичных врагов на другие уровни, то сюда еще можно отнеси нейтральные разрушаемые объекты, урны/вазы/бочки/фонари, шляпу шляпника, сахар выпрыгивающий из сахарницы и прочее.
Губа не дура. Как насчет "нет"? Хитбоксы есть, удаленность есть, считать зачем?
Warning: When making decisions, I try to collect as much data as possible before actually deciding. I try to abstract away and see the principles behind real world events and people's opinions. I try to generalize them and turn into something clear and reusable. I hate depending on unpredictable and having to make lottery guesses. Any problem can be solved by systems thinking and acting.
Experienced Forum User, Published Author, Site Admin, Skilled player (1225)
Joined: 4/17/2010
Posts: 11704
Location: Lake Char­gogg­a­gogg­man­chaugg­a­gogg­chau­bun­a­gung­a­maugg
Дерижабль нужен?
Второе значение - количество вторичных врагов на экране, выпущенных (ракеты, мины ловушек и т.п.).
В т.п. что входит?
Archanfel wrote:
Я придумал простой и элегантный способ как это можно организовать
Да уж, проще некуда.
Warning: When making decisions, I try to collect as much data as possible before actually deciding. I try to abstract away and see the principles behind real world events and people's opinions. I try to generalize them and turn into something clear and reusable. I hate depending on unpredictable and having to make lottery guesses. Any problem can be solved by systems thinking and acting.
Experienced Forum User, Published Author, Site Admin, Skilled player (1225)
Joined: 4/17/2010
Posts: 11704
Location: Lake Char­gogg­a­gogg­man­chaugg­a­gogg­chau­bun­a­gung­a­maugg
You don't need to compare those, just compare times spent in each room, as in, actual gameplay time.
Warning: When making decisions, I try to collect as much data as possible before actually deciding. I try to abstract away and see the principles behind real world events and people's opinions. I try to generalize them and turn into something clear and reusable. I hate depending on unpredictable and having to make lottery guesses. Any problem can be solved by systems thinking and acting.
Experienced Forum User, Published Author, Site Admin, Skilled player (1225)
Joined: 4/17/2010
Posts: 11704
Location: Lake Char­gogg­a­gogg­man­chaugg­a­gogg­chau­bun­a­gung­a­maugg
I don't think having a movie sync on a fixed emulation core has ever been a requirement. The only scenario close to that is when the run relies on emulation bugs in order to pull off some trick. When it's just a timing fix or something like that, I don't remember it being an issue, since no emulator is perfect.
Warning: When making decisions, I try to collect as much data as possible before actually deciding. I try to abstract away and see the principles behind real world events and people's opinions. I try to generalize them and turn into something clear and reusable. I hate depending on unpredictable and having to make lottery guesses. Any problem can be solved by systems thinking and acting.
Experienced Forum User, Published Author, Site Admin, Skilled player (1225)
Joined: 4/17/2010
Posts: 11704
Location: Lake Char­gogg­a­gogg­man­chaugg­a­gogg­chau­bun­a­gung­a­maugg
Тестируй глобальный счетчик. Download TheAdventuresOfBatmanAndRobin.lua
Language: lua

-- The Adventures of Batman and Robin -- 2013-2016, feos and r57shell -- GLOBALS -- MsgTable = {} MsgTime = 30 MsgOffs = 16 MsgCutoff = 60 RNGcount = 0 SpawnCount= 0 SpawnOpac = 192 SpawnX = 0 SpawnY = 0 -- SHORTCUTS -- rb = memory.readbyte rbs = memory.readbytesigned rw = memory.readword rws = memory.readwordsigned rl = memory.readlong rls = memory.readlongsigned rex = memory.registerexec getr= memory.getregister function GetCam() xcam = rws(0xFFDFC4) if rb(0xFFFFF6) == 50 then ycam= rws(0xFFDFE0)-20 else ycam = 0 end end function EnemyPos(Base) GetCam() x1 = rws(Base + 0x12) - xcam y1 = rws(Base + 0x14) - ycam x2 = rws(Base + 0x16) - xcam y2 = rws(Base + 0x18) - ycam hp = rws(Base + 0x1E) end function PlayerPos() local sbase1 = rw(0xFFAD5C) + 0xFF0000 local sbase2 = rw(0xFFADB6) + 0xFF0000 p1speedx = rls(sbase1 + 0x18) / 0x10000 p1speedy = rls(sbase1 + 0x1C) / 0x10000 p2speedx = rls(sbase2 + 0x18) / 0x10000 p2speedy = rls(sbase2 + 0x1C) / 0x10000 end function HandleMsgTable(clear) for i = 1, #MsgTable do if (clear) then MsgTable[i] = nil end if (MsgTable[i]) then GetCam() if (MsgTable[i].y_ > MsgCutoff) then MsgY1 = 0 MsgY2 = 6 else MsgY1 = 203 MsgY2 = 203 end local opacity = (MsgTable[i].timer_ - gens.framecount() + 2)*7 gui.line(i * MsgOffs + 3, MsgY2, MsgTable[i].x_ - xcam, MsgTable[i].y_, 0xFF000000+opacity) gui.text(i * MsgOffs , MsgY1, MsgTable[i].damage_, "red") if (MsgTable[i].timer_ < gens.framecount()) then MsgTable[i] = nil end end end end function HandleDamage() local damage = AND(getr("d0"), 0xFFFF) local base = AND(getr("a2"), 0xFFFFFF) EnemyPos(base) unit = { timer_ = gens.framecount() + MsgTime, damage_ = damage, x_ = x1 + xcam, y_ = y1 } for i = 1, 200 do if MsgTable[i] == nil then MsgTable[i] = unit break end end end function Collision() GetCam() local a0 = AND(getr("a0"), 0xFFFF) local a6 = AND(getr("a6"), 0xFFFF) local damage = rw(a6 + 0xFF0012) local wx2 = getr("d6") - xcam local wy2 = getr("d7") - ycam local wx1 = getr("d4") - xcam local wy1 = getr("d5") - ycam --gui.text(wx2 + 2, wy1 + 1, string.format("%X",a6)) if (damage == 0) then damage = rw(a0 + 0xFF0034) end if (DamageHitbox) then gui.box(wx1, wy1, wx2, wy2, "#FF000000") gui.text(wx1 + 2, wy1 + 1, damage) else gui.box(wx1, wy1, wx2, wy2, "#FFFF0000") end end function InRange(var, num1, num2) if (var >= num1) and (var <= num2) then return true end end function Item() GetCam() local a6 = AND(getr("a6"), 0xFFFF) local x = rw(a6 + 0xFF003E) - xcam local y = rw(a6 + 0xFF0042) local code = rb(a6 + 0xFF0019) if InRange(code, 0, 1) then return elseif InRange(code, 7, 19) then item = "Amo" -- ammo elseif InRange(code, 21, 23) then item = "Cha" -- fast charge elseif InRange(code, 24, 26) then item = "Bom" -- bomb elseif InRange(code, 27, 29) then item = "Lif" -- life elseif InRange(code, 30, 47) then item = "HiP" -- hearts else item = tostring(code) end gui.text(x-7, y, string.format("%s" , item ), "yellow") -- gui.text(x-7, y, string.format("\n%X", a6+0x19), "yellow") end function Hitbox(address) local i = 0 local base = rw(address) while (base ~= 0) do base = base + 0xFF0000 if (rw(base + 2) == 0) then break end EnemyPos(base) if (address == 0xFFDEB2) then gui.box(x1, y1, x2, y2, "#00FF0000") elseif (address == 0xFFDEBA) then gui.box(x1, y1, x2, y2, "#00FFFF00") gui.text(x1 + 2, y1 + 1, hp, "#FF00FF") --if (x2 < 0) then gui.text(x1 + 2, y2 - 7, "x:" .. x1 ) end --if (x1 >= 320) then gui.text(x1 + 2, y2 - 7, "x:" .. x1 - 320) end --if (y2 < 0) then gui.text(x2 + 2, y2 - 7, "y:" .. y2 ) end local offtext = "" if (x2 < 0) then offtext = offtext .. "x:" .. x1 end if (x1 >= 320) then offtext = offtext .. "x:" .. x1 - 320 end if (y2 < 0) then offtext = offtext .. "y:" .. y2 end if (y2 >= 224) then offtext = offtext .. "y:" .. y2 - 224 end if offtext ~= "" then gui.text(x1 + 2, y2 - 7, offtext) end end -- gui.text(x1 + 2, y1 + 1, string.format("\n%X", base + 0x1E - 0xFF0000), "#FF00FF") base = rw(base + 2) i = i + 1 if (i > 400) then break end end end function Objects() GetCam() local base = 0xFFAD54 for i=0,100 do local a5 = rl (base) local link = rw (base+ 6) local ptr1 = rw (base+0x0A)+0xFF0000 local x = rws(base+0x3E) local xsub = rb (base+0x40) local y = rws(base+0x42) local ysub = rb (base+0x44) local hp = rw (base+0x52) local ptr2 = rl (ptr1+0x2A) local code = rw (ptr2) if a5 == 0x88BE then return end if base == 0xFFC320 then -- gui.text(x - xcam, y - ycam, string.format("%X", base)) end base = link + 0xFF0000 end end function Counters() local base = AND(getr("a6"), 0xFFFFFF) local ptr1 = rw(base+0x0A) + 0xFF0000 local ptr2 = rl(ptr1+0x2A) local code = rw(ptr2) SpawnX = rws(base+0x3E) - xcam SpawnY = rws(base+0x42) - ycam if code ~= 0xAE6 -- helicopter bomb and code ~= 0xAF2 -- mini-missile and code ~= 0x2384 -- item then SpawnOpac = 192 SpawnCount = SpawnCount + 1 print(string.format("%X", code)) end end function Main() local color0 = "yellow" local color1 = "yellow" local color2 = "yellow" local base1 = 0xFFAD54 local base2 = 0xFFADAE -- local hp1 = rw (0xFFF650) / 0x10 -- local life1 = rw (0xFFF644) local X1 = rw (base1 + 0x3E) local X1sub = rb (base1 + 0x40) local Y1 = rws(base1 + 0x42) local Y1sub = rb (base1 + 0x44) local X2 = rw (base2 + 0x3E) local X2sub = rb (base2 + 0x40) local Y2 = rws(base2 + 0x42) local Y2sub = rb (base2 + 0x44) local RNG1 = rw (0xFFF5FC) -- local RNG2 = rl (0xFFF5FE) local Weapon1 = rb (0xFFF67B) local Weapon2 = rb (0xFFF6BB) local Charge1 = (rw(0xFFF658) - 0x2800) / -0x80 local Charge2 = (rw(0xFFF698) - 0x2800) / -0x80 local ScreenLock = rw(0xFFDFC0) if Charge1 <= 0 then Charge1 = 0; color1 = "red" end if Charge2 <= 0 then Charge2 = 0; color2 = "red" end if RNGcount > 1 then color0 = "red" end -- HandleMsgTable() PlayerPos() Objects() gui.line( 34, 37, SpawnX, SpawnY, 0x00FF0000+SpawnOpac) gui.text( 0, 30, string.format("Spawns: %d",SpawnCount),"green") gui.text( 0, 210, string.format("\nRNG:%X" , RNG1)) gui.text( 40, 210, string.format("\nLock:%d", ScreenLock)) gui.text( 34, 210, string.format("\n%d" , RNGcount), color0) gui.text( 80, 20, string.format("%2d" , Charge1), color1) gui.text(235, 20, string.format("%2d" , Charge2), color2) -- gui.text(180, 210, string.format("%2d" , Charge1), color1) -- gui.text(300, 210, string.format("%2d" , Charge2), color2) gui.text(180, 210, string.format("\n%2d" , Weapon1+1), "yellow") gui.text(300, 210, string.format("\n%2d" , Weapon2+1), "yellow") gui.text( 81, 210, string.format("Pos: %d.%d\nSpd: %.5f", X1, X1sub, p1speedx), "#AAAAAA") gui.text(137, 210, string.format("/ %d.%d\n/ %.5f" , Y1, Y1sub, p1speedy), "#AAAAAA") gui.text(203, 210, string.format("Pos: %d.%d\nSpd: %.5f", X2, X2sub, p2speedx), "#00BB00") gui.text(260, 210, string.format("/ %d.%d\n/ %.5f" , Y2, Y2sub, p2speedy), "#00BB00") Hitbox(0xFFDEB2) -- Hitbox(0xFFDEBA) RNGcount = 0 end emu.registerafter(function() SpawnOpac = SpawnOpac - 4 if SpawnOpac < 0 then SpawnOpac = 0 end end) savestate.registerload(function() SpawnCount = 0 SpawnOpac = 192 return HandleMsgTable(1) end) gui.register(Main) rex(0x375A, function() DamageHitbox = false end) rex(0x375E, function() DamageHitbox = true end) rex(0x3768, function() DamageHitbox = false end) rex(0x376C, function() DamageHitbox = true end) rex(0x65C4, function() DamageHitbox = false end) rex(0x65C8, function() DamageHitbox = true end) rex(0x995C, function() RNGcount = RNGcount + 1 end) rex(0x4738, Item) rex(0x4534, Item) rex(0x8DE6, Counters) rex(0x8DCE, Counters) --rex(0x8C9A, Collision) rex(0x1085A, HandleDamage) -- meelee rex(0x10CBA, HandleDamage) -- weapon rex(0x10CC4, HandleDamage) -- weapon
Warning: When making decisions, I try to collect as much data as possible before actually deciding. I try to abstract away and see the principles behind real world events and people's opinions. I try to generalize them and turn into something clear and reusable. I hate depending on unpredictable and having to make lottery guesses. Any problem can be solved by systems thinking and acting.
Experienced Forum User, Published Author, Site Admin, Skilled player (1225)
Joined: 4/17/2010
Posts: 11704
Location: Lake Char­gogg­a­gogg­man­chaugg­a­gogg­chau­bun­a­gung­a­maugg
Alyosha wrote:
I'm not sure what the rules are regarding this, are runs from dev builds submittable?
They are required to sync on official releases, with exceptions for things like Dolphin. This might get delayed until the new release as well, but having it published as is is up to a judge and the authors if its optimal.
Warning: When making decisions, I try to collect as much data as possible before actually deciding. I try to abstract away and see the principles behind real world events and people's opinions. I try to generalize them and turn into something clear and reusable. I hate depending on unpredictable and having to make lottery guesses. Any problem can be solved by systems thinking and acting.
Experienced Forum User, Published Author, Site Admin, Skilled player (1225)
Joined: 4/17/2010
Posts: 11704
Location: Lake Char­gogg­a­gogg­man­chaugg­a­gogg­chau­bun­a­gung­a­maugg
I got a 3D overdose from these Portals.
Warning: When making decisions, I try to collect as much data as possible before actually deciding. I try to abstract away and see the principles behind real world events and people's opinions. I try to generalize them and turn into something clear and reusable. I hate depending on unpredictable and having to make lottery guesses. Any problem can be solved by systems thinking and acting.
Experienced Forum User, Published Author, Site Admin, Skilled player (1225)
Joined: 4/17/2010
Posts: 11704
Location: Lake Char­gogg­a­gogg­man­chaugg­a­gogg­chau­bun­a­gung­a­maugg
Well, that was nice 15 minutes.
Warning: When making decisions, I try to collect as much data as possible before actually deciding. I try to abstract away and see the principles behind real world events and people's opinions. I try to generalize them and turn into something clear and reusable. I hate depending on unpredictable and having to make lottery guesses. Any problem can be solved by systems thinking and acting.
Experienced Forum User, Published Author, Site Admin, Skilled player (1225)
Joined: 4/17/2010
Posts: 11704
Location: Lake Char­gogg­a­gogg­man­chaugg­a­gogg­chau­bun­a­gung­a­maugg
Who doesn't work, doesn't evolve.
Warning: When making decisions, I try to collect as much data as possible before actually deciding. I try to abstract away and see the principles behind real world events and people's opinions. I try to generalize them and turn into something clear and reusable. I hate depending on unpredictable and having to make lottery guesses. Any problem can be solved by systems thinking and acting.
Experienced Forum User, Published Author, Site Admin, Skilled player (1225)
Joined: 4/17/2010
Posts: 11704
Location: Lake Char­gogg­a­gogg­man­chaugg­a­gogg­chau­bun­a­gung­a­maugg
Language: c

// function pointer type typedef uint8 (*readfunc)(uint32 A); typedef void (*writefunc)(uint32 A, uint8 V); // macro to define the body #define DECLFR(x) uint8 x(uint32 A) #define DECLFW(x) void x(uint32 A, uint8 V) // example region static DECLFR(ARAM) { return RAM[A]; } void SetReadHandler(int32 start, int32 end, readfunc func) { // do all needed checks here, when emu starts // go through all cells for (x = end; x >= start; x--) // declare a function ARead[x] = func; } // example call for a region SetReadHandler(0, 0x7FF, ARAM); // and this is used in opcodes static __inline uint8 RdMem(unsigned int A) { return(_DB=ARead[A](A)); }
It doesn't really make for an impression of good and stable architecture.
It's probably written oddly, the core is old and not many people wanted to refactor it, but its just regular C, and I see no harm in having an array of functions. And if it speeds things up, that's actually a benefit, since this is probably not the case when being slow is critical and required.
Warning: When making decisions, I try to collect as much data as possible before actually deciding. I try to abstract away and see the principles behind real world events and people's opinions. I try to generalize them and turn into something clear and reusable. I hate depending on unpredictable and having to make lottery guesses. Any problem can be solved by systems thinking and acting.
Experienced Forum User, Published Author, Site Admin, Skilled player (1225)
Joined: 4/17/2010
Posts: 11704
Location: Lake Char­gogg­a­gogg­man­chaugg­a­gogg­chau­bun­a­gung­a­maugg
zeromus, what do you think about the fceux approach I mentioned?
Warning: When making decisions, I try to collect as much data as possible before actually deciding. I try to abstract away and see the principles behind real world events and people's opinions. I try to generalize them and turn into something clear and reusable. I hate depending on unpredictable and having to make lottery guesses. Any problem can be solved by systems thinking and acting.
Experienced Forum User, Published Author, Site Admin, Skilled player (1225)
Joined: 4/17/2010
Posts: 11704
Location: Lake Char­gogg­a­gogg­man­chaugg­a­gogg­chau­bun­a­gung­a­maugg
А знать, какой враг своим спавном увеличил счетчик, надо?
Warning: When making decisions, I try to collect as much data as possible before actually deciding. I try to abstract away and see the principles behind real world events and people's opinions. I try to generalize them and turn into something clear and reusable. I hate depending on unpredictable and having to make lottery guesses. Any problem can be solved by systems thinking and acting.
Experienced Forum User, Published Author, Site Admin, Skilled player (1225)
Joined: 4/17/2010
Posts: 11704
Location: Lake Char­gogg­a­gogg­man­chaugg­a­gogg­chau­bun­a­gung­a­maugg
Archanfel wrote:
А разве тупо по исходному здоровью отличить нельзя?
Оно у них не уникальное. Но вроде таки нашел отличие в другом. А чо за мины?
Warning: When making decisions, I try to collect as much data as possible before actually deciding. I try to abstract away and see the principles behind real world events and people's opinions. I try to generalize them and turn into something clear and reusable. I hate depending on unpredictable and having to make lottery guesses. Any problem can be solved by systems thinking and acting.
Experienced Forum User, Published Author, Site Admin, Skilled player (1225)
Joined: 4/17/2010
Posts: 11704
Location: Lake Char­gogg­a­gogg­man­chaugg­a­gogg­chau­bun­a­gung­a­maugg
Eszik wrote:
It think [2558] SNES Super Metroid "GT code, game end glitch" by amaurea, Cpadolf & total in 14:52.88 deserves a spot here. It's probably the last Super Metroid TAS that used such unique tricks, and its route diverges pretty quickly from any run ever published here.
Warning: When making decisions, I try to collect as much data as possible before actually deciding. I try to abstract away and see the principles behind real world events and people's opinions. I try to generalize them and turn into something clear and reusable. I hate depending on unpredictable and having to make lottery guesses. Any problem can be solved by systems thinking and acting.
Experienced Forum User, Published Author, Site Admin, Skilled player (1225)
Joined: 4/17/2010
Posts: 11704
Location: Lake Char­gogg­a­gogg­man­chaugg­a­gogg­chau­bun­a­gung­a­maugg
creaothceann wrote:
For every byte of the CPU address space there's a function for reading and a function for writing?
Yes.
creaothceann wrote:
CPUs have branch predictors, so if there aren't too many tests (and they follow predictable patterns) it should still be fast enough.
How can you predict what memory address a game will need?
Warning: When making decisions, I try to collect as much data as possible before actually deciding. I try to abstract away and see the principles behind real world events and people's opinions. I try to generalize them and turn into something clear and reusable. I hate depending on unpredictable and having to make lottery guesses. Any problem can be solved by systems thinking and acting.
Experienced Forum User, Published Author, Site Admin, Skilled player (1225)
Joined: 4/17/2010
Posts: 11704
Location: Lake Char­gogg­a­gogg­man­chaugg­a­gogg­chau­bun­a­gung­a­maugg
What about attempting to speed up the core too? FCEUX is so fast because it uses a separate function for every memory address for read and write, so it has to do zero checks regarding regions (and I think Nestopia too). Considering that reading is done at least every instruction, and sometimes more, and quite often it also writes, doing this stuff millions times per second with all the region checks must be causing quite some slow down. I also tried manually inlining the opcode functions right into the switch, but that gave zero speed up.
Warning: When making decisions, I try to collect as much data as possible before actually deciding. I try to abstract away and see the principles behind real world events and people's opinions. I try to generalize them and turn into something clear and reusable. I hate depending on unpredictable and having to make lottery guesses. Any problem can be solved by systems thinking and acting.
Experienced Forum User, Published Author, Site Admin, Skilled player (1225)
Joined: 4/17/2010
Posts: 11704
Location: Lake Char­gogg­a­gogg­man­chaugg­a­gogg­chau­bun­a­gung­a­maugg
Yeah, even though it fails to even match the existing records, it's not losing seconds, only frames here and there. So why not publish it?
Warning: When making decisions, I try to collect as much data as possible before actually deciding. I try to abstract away and see the principles behind real world events and people's opinions. I try to generalize them and turn into something clear and reusable. I hate depending on unpredictable and having to make lottery guesses. Any problem can be solved by systems thinking and acting.
Experienced Forum User, Published Author, Site Admin, Skilled player (1225)
Joined: 4/17/2010
Posts: 11704
Location: Lake Char­gogg­a­gogg­man­chaugg­a­gogg­chau­bun­a­gung­a­maugg
Второй вечер ковыраюсь в этом говне и до сих пор не понимаю, как можно отличить эти твои мелкие ракеты от прочих врагов. Это прям критично?
Warning: When making decisions, I try to collect as much data as possible before actually deciding. I try to abstract away and see the principles behind real world events and people's opinions. I try to generalize them and turn into something clear and reusable. I hate depending on unpredictable and having to make lottery guesses. Any problem can be solved by systems thinking and acting.
Experienced Forum User, Published Author, Site Admin, Skilled player (1225)
Joined: 4/17/2010
Posts: 11704
Location: Lake Char­gogg­a­gogg­man­chaugg­a­gogg­chau­bun­a­gung­a­maugg
И как этот глобальный счетчик в сэйвах сохранять?
Warning: When making decisions, I try to collect as much data as possible before actually deciding. I try to abstract away and see the principles behind real world events and people's opinions. I try to generalize them and turn into something clear and reusable. I hate depending on unpredictable and having to make lottery guesses. Any problem can be solved by systems thinking and acting.
Experienced Forum User, Published Author, Site Admin, Skilled player (1225)
Joined: 4/17/2010
Posts: 11704
Location: Lake Char­gogg­a­gogg­man­chaugg­a­gogg­chau­bun­a­gung­a­maugg
А чо в теме не сказал что нужно?
Warning: When making decisions, I try to collect as much data as possible before actually deciding. I try to abstract away and see the principles behind real world events and people's opinions. I try to generalize them and turn into something clear and reusable. I hate depending on unpredictable and having to make lottery guesses. Any problem can be solved by systems thinking and acting.
Experienced Forum User, Published Author, Site Admin, Skilled player (1225)
Joined: 4/17/2010
Posts: 11704
Location: Lake Char­gogg­a­gogg­man­chaugg­a­gogg­chau­bun­a­gung­a­maugg
Warning: When making decisions, I try to collect as much data as possible before actually deciding. I try to abstract away and see the principles behind real world events and people's opinions. I try to generalize them and turn into something clear and reusable. I hate depending on unpredictable and having to make lottery guesses. Any problem can be solved by systems thinking and acting.
Experienced Forum User, Published Author, Site Admin, Skilled player (1225)
Joined: 4/17/2010
Posts: 11704
Location: Lake Char­gogg­a­gogg­man­chaugg­a­gogg­chau­bun­a­gung­a­maugg
Aktan: can you do a comparison that proves that what we used to do before 2012 was worse than your suggestion? We were using the factor 6 for 224p, and even back then I couldn't see a single artifact in the HD encode (before uploading of course).
Warning: When making decisions, I try to collect as much data as possible before actually deciding. I try to abstract away and see the principles behind real world events and people's opinions. I try to generalize them and turn into something clear and reusable. I hate depending on unpredictable and having to make lottery guesses. Any problem can be solved by systems thinking and acting.
Post subject: yt:stretch=4:3 got nuked by youtube
Experienced Forum User, Published Author, Site Admin, Skilled player (1225)
Joined: 4/17/2010
Posts: 11704
Location: Lake Char­gogg­a­gogg­man­chaugg­a­gogg­chau­bun­a­gung­a­maugg
https://support.google.com/youtube/answer/146402?hl=en
Some shithead wrote:
This feature is not available for videos uploaded after June 2016.
We'll be doing aspect ratio correction for HD encodes ourselves again, like we've been doing until 2012. The problem is, upscaling x8 gives the smallest filesize of all upscalers for a video like 320x240. Not having integer scaling factors will cost us a huge boost in filesizes. So we'll need to figure out the new target resolution now for anything that requires aspect correction. Arcades, handhelds, N64 and probably some others are okay though. PS: Most of the June's encodes were fine, it all started with Amy https://www.youtube.com/watch?v=OA7riw_jIEQ https://www.youtube.com/watch?v=IsE_LOHuSg8 And then Eek! https://www.youtube.com/watch?v=VAD_ht35hyA So we'll have to reencode them. EDIT: Replace this line (#98 in TASEncodingPackage, #109 in TASEncodingPackage2) in the encoding script
Language: avisynth

c = handheld ? b : (hd ? b : b.LanczosResize(width, height, taps=2))
with
Language: avisynth

c = handheld ? b : b.LanczosResize(width, height, taps=2)
If you don't want to be upscaling using the usual factor 8, which generates insane overhead in file size and encoding speed due to aspect ratio correction, you can use the following formula, that we were using back then, for anything that's not 4:3 (line 51 in TEP, 71 in TEP2).
Language: avisynth

factor = hd ? \ (handheld == false) ? \ (last.height >= 540) ? 2 : \ (last.height >= 270) ? 4 : \ (last.height >= 180) ? 6 : \ 8 : \ (last.height >= 1440) ? 1 : \ (last.height >= 720) ? 2 : \ (last.height >= 360) ? 4 : \ 8 : 1
Warning: When making decisions, I try to collect as much data as possible before actually deciding. I try to abstract away and see the principles behind real world events and people's opinions. I try to generalize them and turn into something clear and reusable. I hate depending on unpredictable and having to make lottery guesses. Any problem can be solved by systems thinking and acting.
Experienced Forum User, Published Author, Site Admin, Skilled player (1225)
Joined: 4/17/2010
Posts: 11704
Location: Lake Char­gogg­a­gogg­man­chaugg­a­gogg­chau­bun­a­gung­a­maugg
Clone: c Delete: d Clear: x -- Done, along with Insert. Configure in hotkeys. Cancel actions: Esc (stops seeking, exit analog editing) -- Analog editing was already canceled by Esc. Added cancel seeking. Rewind: q -- Global rewind now works Enter Analog edit and cycle through: e (Pressing e causes entering editing the analog input for the first visible analog column for the current selection, if multiple frames are selected edit input for all selected frames. If already in analog edit mode go to the next analog column when e is pressed once more) -- Whenever I'm totally free. Toggle auto-restore: s -- Done for all 3. Configure in hotkeys. Restore last position: a -- Middle-click Update the build! Next: - option to fire restore after mousedown -- Done, doesn't affect rerecords at all. - esoteric frame 203000 problem
Warning: When making decisions, I try to collect as much data as possible before actually deciding. I try to abstract away and see the principles behind real world events and people's opinions. I try to generalize them and turn into something clear and reusable. I hate depending on unpredictable and having to make lottery guesses. Any problem can be solved by systems thinking and acting.
1 2 230 231 232 455 456