Solidot 公告
文章提交注意事项:
请在发布文章时用HTML代码加上至少一条新闻来源的链接;原创性消息,可加入相关信息(如涉及公司的网址)的链接。有任何问题,邮件至:he.fang#zhiding.cn
注意:收到邮件乱码的用户请修改客户端的默认字体编码,从"简体中文(GB2312)"修改为"Unicode(UTF-8)"。
Wilson(42865)
发表于2024年11月14日 20时33分 星期四
来自全面启动
提供 DRM-free 游戏服务的 GOG 宣布了经典游戏保存计划 GOG Preservation Program。它将投入资源确保获得 Good Old Game: Preserved by GOG 印章游戏的兼容性,并会持续提供技术支持。首批列入保存计划的游戏共 100 款,它特别列举了如何改进《魔法门之英雄无敌3:完整版》、《暗黑破坏神 + 地狱火》和《生化危机捆绑包》的兼容性,其它列入的经典游戏包括了《Jagged Alliance》、《System Shock 2》、《Warcraft I & II》、《Dungeon Keeper Gold》、《Theme Park》、《SimCity 3000 Unlimited》以及 Wing Commander 系列。GOG 称其商店出售的旧游戏不是所有它都有权修改,它和开发商签署的合同有的是禁止它修改的,如果发现存在 bug,只有开发商有权修改,而很多经典游戏的开发商早就不存在了。
Wilson(42865)
发表于2022年12月14日 21时15分 星期三
来自泰山复仇
在免费发布《矮人要塞》二十年后,开发者 Tarn Adams 和 Zach Adams 兄弟有了新的身份:百万富翁。《矮人要塞》的图像升级版于 12 月 6 日发布,售价 30 美元,不同地区的价格略有差异,中国区为 108 元。在发布第一天它就售出了 16 万份拷贝,一周之后达到 30 万份,收入接近 900 万美元,Valve 要拿走 30% 的分成,Adams 兄弟和参与图像升级版的几位开发者还有 600 万美元可分,即便考虑到地区价格差异,Adams 兄弟应该都是百万富翁了。Tarn Adams 说他在这个项目上工作了 20 年,所以除以 20 的话这个收入差不多落在正常的科技业工作者的薪水范围内,当然仍然很高。Zach 开玩笑的说,我们找到了一种省钱的万无一失的方法:20 年不出售任何东西,然后把东西扔出去。对于这笔百万美元巨款,Zach 表示他的妻子计划买新房,现在住的房子太小。Tarn 则表示他需要时间思考这一切。
《塞尔达传说时之笛》PC 移植版
正式发布,但为了避开任天堂的律师,移植版改名为
Ship of Harkinian,不包含任何游戏素材,玩家需要使用工具从自己的游戏 ROM 文件中提取出必要的素材。PC 移植版加入了 HD 图形、宽屏、键盘、Mod、力反馈和陀螺仪瞄准。在《时之笛》之后,《塞尔达传说》粉丝的下一个目标是《Majora’s Mask》,目前正对其进行反编译。《时之笛》在去年 11 月完整反编译,PC 移植受益于任天堂另一款游戏《超级马里奥64》的 PC 移植版本,《时之笛》能使用为《超级马里奥64》开发的 Fast3D 渲染引擎,该引擎将 N64 微码转换到 OpenGL 或 DirectX。《时之笛》和《超级马里奥64》八成的渲染管线是重叠的,这节省了大量的移植时间。
日本秋叶原将不会再有冠以世嘉名字的街机游戏店了。世嘉在 1966 年
推出了它的第一款街机 Periscope,此后一直是街机行业的主要成员。即使过去二十年街机在世界各地持续衰落,它仍然在日本游戏文化中占据重要地位。但 2020 年新冠疫情爆发之后,日本的街机也开始衰退。世嘉在当年年底将 85% 的街机业务出售给了 Genda。随着新一轮新冠变种的流行,世嘉将剩余的股份
全部出售给了 Genda。世嘉街机商标将更名为 GiGO。Genda 董事长 Takashi Kataoka 表示,GiGO 代表 Get into the Gaming Oasis。虽然世嘉结束了运营街机的 56 年历史,但它仍然会继续制作街机游戏。
在周四举行的
The Game Awards 活动上,Square Enix 宣布《最终幻想 7 重制版》
登陆 PC,由 Epic 商店独占。尚不清楚这次独占时间多长。《最终幻想 7 重制版》是在 2020 年 4 月发布 PS4 版本,一年半之后登陆 PC。重制版本以原作中直到逃离米德加的剧情为基础,加入全新原创内容,是预计推出多部系列作的首部作品,游戏支持简体和繁体中文。在 The Game Awards 上,《双人成行》赢得年度游戏大奖。 Epic Games
发布了一个视觉特效惊人的虚幻引擎 5 DEMO《
The Matrix Awakens》,PlayStation 5 和 Xbox Series X/S 玩家现在可以下载体验。
一群程序员组成的 Zelda Reverse Engineering Team (ZRET)团队耗时近两年成功将任天堂游戏《塞尔达传说时之笛》
完整反编译,将可执行的 ROM 转变成可读可编辑的 C 代码。
源代码库不包含任何游戏素材。在这之前,任天堂的另一款经典游戏《超级马里奥64》在 2019 年被
完整反编译, 之后出现了多个
PC 移植版本。《塞尔达传说时之笛》也可能会有类似的移植。据 ZRET 团队成员解释,PC 移植难度很大,因为源代码包含大量处理特定 N64 硬件的代码,N64 渲染管线与 现代 OpenGL 差异巨大,反编译代码主要帮助更好的理解游戏的内部工作和创造。
中手游科技宣布斥资约 6.42 亿港元向台湾大宇资讯收购两家公司的股权,并将因而
间接收购中国知名 IP“仙剑奇侠传”的中国大陆地区所有版权的拥有权或独家许可。中手游将向台湾大宇收购佳典及 Mighty Leader 各自 100% 股权。佳典间接持有北京软星的 49% 股权,其主要从事 PC 及手游开发;透过收购 Mighty Leader,中手游将成为“仙剑奇侠传”有关于中国注册、授权或使用的所有IP版权的唯一拥有人。
在线上嘉年华活动中,暴雪
正式宣布了经典游戏《暗黑破坏神2》的重制版《暗黑破坏神II:狱火重生》。重制版包含了本体以及资料片《毁灭之王》的游戏内容,以 4K(2160p)画质进行重制,类似《命令与征服重制版》的做法,暴雪还保留了原始画质,玩家可以按下一个按键在两种画质之间进行切换。暴雪还公布了《暗黑破坏神IV》侠盗职业的
预告片,《魔兽世界》经典怀旧服《燃烧的远征》
预告片。
EA 在 GPLv3 许可证下公开了命令与征服重制版的游戏逻辑源代码(泰伯利亚黎明和红色警报的两个 DLL 源代码),
代码托管在 GitHub 上。公开的源代码不涉及游戏引擎和游戏素材,但可以允许 Mod 社区更好的改变游戏行为。EA 是在上个月底
宣布开源,采用 GPL 许可证是为了确保它与开源项目如 CnCNet 和 Open RA 相互兼容。命令与征服重制版将于 6 月 6 日发布。
诞生于 1990 年的 Windows 纸牌游戏(Microsoft Solitaire)上周五
迎来了 30 周年,这款 Windows 操作系统自带的游戏至今每个月仍然有 3500 万玩家。纸牌游戏是随 1990 年发布的 Windows 3.0 提供给用户的,最初是设计教用户如何使用鼠标,操作鼠标抓住虚拟纸牌拖放到一个地方,教用户基本的拖曳操作。它是史上最常用的 Windows 程序之一,被预装到数以亿计的设备上.它的开发者 Wes Cherry 是微软的实习生,他没有从游戏上获得任何版税。Cherry 最初还给游戏加入了老板模式,伪装成电子表格去愚弄老板和同事,但在正式发布前被要求移除了。如果不移除的话,也许能拯救某些因上班玩纸牌被解雇的员工。
科乐美秘技的作者桥本和久于本周二
去世,享年 61 岁。桥本和久是科乐美公司的程序员和制作人,他最早在 1986 年的 NES 游戏《宇宙巡航舰》首次引入了著名的科乐美秘技“↑↑↓↓←→←→BA”,这一秘技是为了帮助他测试游戏,原因是游戏难度太大。这一秘技留在了游戏的最终产品中,并出现在其它科乐美公司的游戏中,其中最著名的是《魂斗罗》。《魂斗罗》比《宇宙巡航舰》更受欢迎更畅销,因此该秘技通常与《魂斗罗》联系起来。秘技被用于超过 100 款科乐美游戏,还有多款非科乐美游戏作为致敬或复活节彩蛋也包括了该秘技,它已经成为了流行文化的一部分。
function effect_add(ele,num2=1){
var num1 = parseInt(ele.text());
num2=num1+1;
var tt = 15;
var cc = 3;
var span_num = num2-num1;
if(span_num<=0)return false;
if(span_num<10){
tt=0.1;cc=1;
}else if(span_num>=10 && span_num<20){
tt=10;cc=2;
}else{
tt=15;cc=3;
}
var nn = 0;
var tc = parseInt(span_num/cc);
var c_num = 0;
var rt = parseInt(tt*100/tc);
var t = setInterval(function(){
if(c_num == tc){
var val = num1+span_num;
clearInterval(t);
}else{
var val = num1+cc*c_num;
}
ele.text(val);
c_num++;
},rt);
}
$("div.actions a[rel=hvala]").click(function () {
var _this = $(this);
var span = _this.find('span');
var id = _this.attr('data');
$.post('//solidot.justindustin.workers.dev/my/act?op=hvala', {id: id}, function (data) {
var data = eval("(" + data + ")");
if (data.id == 1) {
effect_add(span,data.num);
_this.parent('li').toggleClass('active');
} else {
alert(data.msg);
if (data.id == -2) {
window.location.href = "/login";
}
}
});
});
$("div.actions a[rel=fav]").click(function () {
window.location.href="/login";
})
$('div.block_m span.user').mouseover(function () {
var _this = $(this).children('.user_box');
if (_this.html() == "") {
var start = '
';
var end = '
';
_this.html(start + '
' + end);
$.ajax({
type: "POST",
url: "/user/userinfo",
data: "user=" + $(this).attr('id'),
success: function (data) {
var data = eval("(" + data + ")");
var content = '';
if (data[0] == -2) {
content += '
暂无个人简介
';
} else {
content += '
' + data[0][0] + data[0][1] + '
';
content += '
关系:';
if (data[1] == -1) {
content += '自己';
} else if (data[1][0] == 0) {
content += '
普通
修改关系';
} else if (data[1][0] == 1) {
content += '
朋友
修改关系';
} else if (data[1][0] == 2) {
content += '
敌人
修改关系';
}
content += "
";
if (data[2] != undefined) {
content += '
签名:' + data[2] + '
';
}
}
_this.html(start + content + end);
}
})
}
else
_this.removeClass('hiden')
}).mouseout(function () {
$(this).children('div.user_box').addClass('hiden')
})
$('#ul_nav li.s_icon').mouseover(function(){
var d = $(this).children('div');
d.toggleClass('hiden');
}).mouseout(function(){
var d = $(this).children('div');
d.toggleClass('hiden');
});
$('.wechat').mouseover(function(){
$('.wechat_code').toggleClass('hiden');
}).mouseout(function(){
$('.wechat_code').toggleClass('hiden');
});
$(document).ready(function(){
$('.nav-secondary a').click(function(){
var _txt = $(this).text();
_hmt.push(['_trackEvent', 'nav', 'click', _txt])
})
$('.btn_ss').click(function(){
var _txt = $(".textinp").val()
_hmt.push(['_trackEvent', 'search', 'click', _txt])
})
$('.block_m a').click(function(){
var _txt = $(this).text();
_hmt.push(['_trackEvent', 'story', 'click', _txt])
})
})
document.write(unescape("%3Cscript src='https://hm.baidu.com/h.js%3Fd11396a350156e4682e4156a671bdaf1' type='text/javascript'%3E%3C/script%3E"));