Wizardry 開發史 (2) – Galactic Attack

(圖說:Galactic Attack 遊戲片頭畫面。當時的製作公司名稱還是 Sirotech。)

Siro-Tech 成立後,Norman 和 Robert 就開始討論在 Info-Tree 之後的第二套產品要做什麼。Robert 在電腦展時注意到,遊戲軟體特別吸引人的目光,於是就提議來做遊戲。Norman 一開始不是很贊成,因為他覺得一台電腦這麼貴,應該沒什麼人會專門拿來玩 game 吧?還是做些商業軟體比較實際。不過最後,Norman 還是接受了 Robert 的意見(這人腦波好像特別弱? XD),讓 Robert 開始開發遊戲軟體。

Read More

Wizardry 開發史 (1) – Sir-Tech 的誕生

Sir-Tech 重要人物合照。由左至右分別為 Frederick Sirotek, Janice Woodhead, Robert Woodhead, Robert Sirotek, Jean Bromley, Peter Bresett, Lynn Dupree, Norman Sirotek, 以及 Linda Sirotek。Linda 後來嫁給 Ian Currie,冠夫姓成為 Linda Currie,也就是 Wizardry 8 的製作人。
(圖片來源:http://www.softalkapple.com/content/exec-sir-tech-wizzing-top

讓我們從 Sirotek 家族的故事開始談起。

Sirotek 家族原本住在捷克(當時為捷克斯洛伐克的一部份)。在戰間期的那段時間,捷克斯洛伐克的經濟快速發展,為全球十大經濟體之一。當時 Bedrich Sirotek 是一名建築師,因為一戰過後各地建設需求高,他的生意做得不錯,賺了不少錢。

有了錢當然繼續投資。Bendrich 開始買地,其中最特別的,是買下一棟 12 世紀落成的羅馬式古堡!雖然古堡在被 Bendrich 買下前已經荒廢了數十年,但 Bendrich 很喜歡它,將它視為他建築事業王國的王座。買下這座城堡後,Bendrich 馬上帶著家人搬進去,然後自己親手逐步翻修。

Read More

Lamigo與我有猿 – 我們的猿份

(原文張貼於 PTT https://www.ptt.cc/bbs/Monkeys/M.1571754227.A.BF7.html

2019 年 10 月 17 日,台中洲際棒球場。我跟著數千名的十號隊友們,一起拋下了藍色的彩帶。終於,我們親眼見證了 Lamigo 王朝的誕生。手上拿著印著「劉玠廷」的毛巾,聽著領隊講話,一向被老婆笑說沒有眼腺的我,眼眶也忍不住濕了。

劉家經營這支球隊 16 年了,而我也當了 15 年的熊/猿迷。我想,是時候整理一下這十多年來的回憶了。


Read More

UTF-8 與 BOM

Unicode 簡介

Unicode(中文翻成「萬國碼」或「統一碼」)是一種文字編碼方式。主要的目的,是希望能提供一套統一的標準,以數字的方式表示全世界人類使用的文字,方便利用電腦、網路儲存及傳輸文字資訊。詳細的歷史沿革,網路上可以找到很多文章,在此不再贅述。

關於碼點 Code Point

每一個被 Unicode 規範定義的文字,都有一個獨一無二的數值,我們稱之為「碼點 (Code Point,亦翻作「代碼點」)」。通常我們會用 U+xxxxxxxx 代表 16 進位的數字)這樣的格式來表示碼點。

Read More

「感謝日本」布條背後的故事

DSC_7498e

這次日本馬拉松式看球之旅,最重要的計畫,就是這張「感謝日本」的布條。

開始籌劃旅行是過年前的事。過年期間台灣發生了不幸的事情,接下來看到日本人們以「報恩」的態度支援救災、募款,內心真的相當感動。台灣在 2011 年對日本伸出援手,日本人一直到今天都還在感謝台灣。這次的感謝計畫,我是懷著「如果不表達感謝之意,就太失禮了」這樣的心情進行的。

Read More

[C++11] Ranged For Loop

在以前,若是我們要針對 STL container 中的所有物件做事情,最「方便」的方法是使用 iterator 搭配傳統的 for-loop:

class Entry;
list<Entry> my_list;

void check_entries(void)
{
    for ( list::iterator<Entry> itor = my_list.begin(); itor != my_list.end(); ++itor)
    {
        Entry& e = *itor; // iterator 本身的操作類似 pointer
        // do something...
    }
}
Read More

C++ bool 所占的記憶體空間與資料對齊 (data alignment)

前言

這篇文章的內容,緣起於「程式人雜誌」討論區的這個討論串。這個討論串到最後已經失焦了,不過有幾個重點是值得提出來討論的,於是順手整理出幾個重點。

bool 所占的記憶體空間

C++ 內建的標準的型別中,有一個叫 bool 的型別,用來儲存邏輯運算的 true(真)與 false(假)。由於這種型別的變數就只會有 truefalse 這兩種可能的值,因此,若是我們要儲存這樣的變數的話,理論上來說其實只要 1 個 bit 就夠用了。

然而在實作上,由於不是所有的 CPU 都能夠很有效率地處理單一 bit 的運算,因此通常編譯器會用其他更有效率方式的處理。

C++ 語言標準並沒有硬性規定 bool 要用多大的記憶體空間實作,把這件事留給編譯器自行決定。以 Visual C++ 來說,Visual C++ 4.2 是利用 typedefbool 定義成 int,因此 1 個 bool 變數會占用 4 個 byte 的空間;但在 Visual C++ 5.0 以後的版本,bool 則實作為占用 1 個 byte 的內建型別。在目前 x86 版的 GCC 中,bool 占用的空間也是 1 個 byte;但依據 CPU 架構的不同,可能會有不同的做法。

Read More

Swapping Nibbles in Keil C51

今天寫程式的時候,有個地方需要 swap 某個 byte 的兩個 nibbles。其實 8051 原本就有一個 instruction 專門做這件事。若是直接寫組語的話,只要 3 行就搞定了:

    MOV     A,tmp       ; 先將原本的值搬進 accumulator
    SWAP    A           ; swap nibbles
    MOV     tmp,A       ; 先將原本的值搬進 accumulator

問題我是用 C 在寫 code 的,所以我就開始研究是不是有辦法讓 Keil C 幫我產生這樣的 code。

Read More